ASP.NET MVC的Controller介绍

在ASP.NET mvc程序中除了一些静态的资源如html,js,图片,css等等,其它每一个URL请求都会被相应的Controller处理并做出相应的响应。Controller是MVC中连接Model和View的中间桥梁,Controller中文意思是控制器,也就是起到一个获取请求信息,控制返回结果,控制跳转页面等的使用。当Controller中的一个具体Action接收到URL请求,会调用我们的业务代码,操作领域对象,最后根据得到的结果选择相应的视图返回给客户端。严格的来说,在Controller中最好是不要包含业务逻辑代码和用户界面UI相关代码。下面我们来介绍一下ASP.NET MVC的Controller核心知识点。

一、ASP.NET MVC使用接口IController创建一个自定义Controller

在ASP.NET MVC框架中所有的Controller类都要实现接口IController。


  1. public interface IController {
  2. void Execute(RequestContext requestContext);
  3. }
ASP.NET MVC框架中抽象类Controller就实现了这个接口,如下图:

ASP.NET MVC的Controller介绍

下面我使用接口IController创建一个自定义Controller:


  1. using System.Web.Mvc;
  2. using System.Web.Routing;
  3. namespace ControllersAndActions.Controllers {
  4. public class SimpleController : IController {
  5. public void Execute(RequestContext requestContext) {
  6. string controller = (string)requestContext.RouteData.Values["controller"];
  7. string action = (string)requestContext.RouteData.Values["action"];
  8. requestContext.HttpContext.Response.Write(
  9. string.Format("Controller: {0}, Action: {1}", controller, action));
  10. }
  11. }
  12. }

SimpleController读取当前请求中对应的路由信息(RouteData)中controller和action两个变量的值,并把它们输出到页面上。

运行程序,在浏览器输入路径“/Simple”,有下面的结果:

ASP.NET MVC的Controller介绍

注意:上面只是演示了怎么使用接口IController创建一个自定义Controller,上面的例子其实很简单没有什么实际意义。SimpleController只使用了接口IController,输出的是纯文本字符串,这里连视图都没有用。

二、ASP.NET MVC使用抽象类Controller创建一个Controller

上面使用接口IController创建一个自定义Controller还远远达不到真正的Controller的功能要求,要实现一个真正的Controller,全要自己实现还有很多工作要做。其实ASP.NET MVC框架给我们提供了默认的实现,我们每次新建一个Controller是都可以看到这个Controller是默认继承抽象类Controller的。这个抽象类我们提供了下面三大的特性:

1、多个Action方法实现,不仅仅中只有一个Execute方法,不同URL的请求参数调用不同的Action方法,比如返回字符串调用Content,返回文件调用File,返回视图调用 View或者PartialView,调转调用Redirect或者RedirectAction,RedirectionRoute等等。下面看看Controller中实现的一些方法:

ASP.NET MVC的Controller介绍

可以看到Controller类的内部很多方法都是通过重载的方式实现的,这样可以满足不同的参数调用。

2、Action results,我们在Action内部可以返回一个对象给一个具体的View,或者跳转到其它的Action或者URL。

3、基于AOP思想的Filter过滤器,为我们提供了常用的Filter过滤器(比如安全认证)。

使用抽象类Controller创建一个Controller:


  1. using System.Web.Mvc;
  2. namespace ControllersAndActions.Controllers {
  3. public class DerivedController : Controller {
  4. public ActionResult Index() {
  5. ViewBag.Message = "Hello from the DerivedController Index method";
  6. return View("MyView");
  7. }
  8. }
  9. }
视图文件The MyView.cshtml:

  1. @{
  2. ViewBag.Title = "MyView";
  3. }
  4. <h2>MyView</h2>
  5. Message: @ViewBag.Message
运行程序,在浏览器输入路径“/Derived/Index ”,有下面的结果:


ASP.NET MVC的Controller介绍


这样我们新建自己Controller只要在Controller类里面加自己Action方法就可以了,其实这个类是System.Web.Mvc.Controller的子类,复用了它的很多实现。这样我们就不用关心太多业务之外的问题。