controller层的定义:主要是通过分析URL分发,将M层将数据拿出来,然后返回到VIEW层。
?
自己定义一个controller
1.
使用Icontroller接口
public interface Icontroller
{
???? void Execute(RequestContextrequestcontent);
}
2.实现该接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace NerdDinner.Models
{
//命名规则,NAME+Controller
??? public class MyController : IController
??? {
??????? public void Execute(RequestContext requestContext)
??????? {
??????????? var response = requestContext.HttpContext.Response;
??????????? response.Write("<h1>Hello World</h1>");
??????? }
??? }
}
?
然后在浏览器中输入:http://localhost:2331/My
注意router在解析URL的时候会将你的MyController中的Controller去掉,所以你在实现类的时候要写,在URL的时候不要写。
传入的参数requestContext得到HttpContext可以得到很多对象。
?
类似JAVA中的struts中的Action
但是我们在实际开发中直接继承的是Controller
?public class HomeController : Controller
?
自己实现添加一个路由信息:
如果你的URL想变成:http://localhost:2331/simple/distance/1,2/3,4
首先在Global.asax.cs
加入定义的一个路由信息:
routes.MapRoute(
??????????????? "Simple", // 路由名称
??????????????? "Simple/distance/{x1},{y1}/{x2},{y2}", // 带有参数的 URL
???????????????
???????????????? new { controller = "Simple", action = "Distance", id = UrlParameter.Optional } // 参数默认值
??????????? );
然后写SimpleController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace NerdDinner.Controllers
{
??? public class SimpleController : Controller
??? {
??????? //
??????? // GET: /Simple/
??????? public void Distance(int x1,int y1,int x2,int y2)
??????? {
??????????? Response.Write(x1+"+"+y1);
??????????? Response.Write(x2 + "+" + y2);
??????? }
??? }
}
然后就可以通过浏览器访问了。
?
?
返回的ActionResult接口:
public abstract class ActionResult
{
??? public abstract void ExecuteResult(ControllerContext context);
}