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。
- public interface IController {
- void Execute(RequestContext requestContext);
- }
下面我使用接口IController创建一个自定义Controller:
- using System.Web.Mvc;
- using System.Web.Routing;
- namespace ControllersAndActions.Controllers {
- public class SimpleController : IController {
- public void Execute(RequestContext requestContext) {
- string controller = (string)requestContext.RouteData.Values["controller"];
- string action = (string)requestContext.RouteData.Values["action"];
- requestContext.HttpContext.Response.Write(
- string.Format("Controller: {0}, Action: {1}", controller, action));
- }
- }
- }
SimpleController读取当前请求中对应的路由信息(RouteData)中controller和action两个变量的值,并把它们输出到页面上。
运行程序,在浏览器输入路径“/Simple”,有下面的结果:
注意:上面只是演示了怎么使用接口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中实现的一些方法:
可以看到Controller类的内部很多方法都是通过重载的方式实现的,这样可以满足不同的参数调用。
2、Action results,我们在Action内部可以返回一个对象给一个具体的View,或者跳转到其它的Action或者URL。
3、基于AOP思想的Filter过滤器,为我们提供了常用的Filter过滤器(比如安全认证)。
使用抽象类Controller创建一个Controller:
- using System.Web.Mvc;
- namespace ControllersAndActions.Controllers {
- public class DerivedController : Controller {
- public ActionResult Index() {
- ViewBag.Message = "Hello from the DerivedController Index method";
- return View("MyView");
- }
- }
- }
- @{
- ViewBag.Title = "MyView";
- }
- <h2>MyView</h2>
- Message: @ViewBag.Message
这样我们新建自己Controller只要在Controller类里面加自己Action方法就可以了,其实这个类是System.Web.Mvc.Controller的子类,复用了它的很多实现。这样我们就不用关心太多业务之外的问题。