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);
}