- Controller类继承自ControllerBase类, ControllerBase类实现了IController接口.
- ControllerBase类实现了Exceute方法, 当URL路由匹配到Controller后,就会执行Excecute方法进行Controller的处理.
- ControllerBase类还定义了抽象的ExcecuteCore方法,当Execute执行完毕后就会执行ExecuteCore方法.
- ControllerBase类还定义了三个核心的属性 TempData, ViewData.
- Controller继承了ControllerBase外, 还实现了一系列的Filter接口.
- asp.net mvc应用程序URL都是映射到Controller中的某个Action中,由Action处理逻辑并返回View.
- Controller中的Public方法都被当做是Action方法, Action方法通常会返回ActionResult结果.
- 默认情况Action方法的名称就是这个Action的Action名, Action名就是Route中匹配Action方法的URL部分. 例如:Home/Index Index就是Action名.
- Action方法默认匹配同名的Action, 但也可以自己定义,通过ActionNameAttribute使Action方法匹配指定名称的Action.
- Action方法还可以通过AcceptVerbsAttribute让其匹配Action指定的HttpMethod.(见下面代码段)
- 如果要为一个Public方法设置为不是Acion方法,就需要为这个Public方法指定NonAction的Attribute.
- Aciton方法中的参数必须和Route中指定的参数名称相同, 当访问URL时, URL参数部分值会自动传递给Action方法的参数.
- Controller的逻辑处理中可能会需要用到通用的部分,比如为用户打印错误信息操作, 那么我们可以自己通过继承Controller,实现自己的基类.
Action方法返回ActionResult类型的结果。ASP.NET MVC为我们提供了几种ActionResult的实现,如下:
当然我们也可以自定一个我们的ActionResult返回给客户端,例如一个RssResult。
14.Controller的逻辑处理中可能会需要用到通用的部分,比如为用户打印错误信息操作, 那么我们可以自己通过继承Controller,实现自己的基类.
[AcceptVerbs("GET")] public ActionResult Setting() { throw new NotImplementedException(); } [ActionName("Setting"), AcceptVerbs("POST")] public ActionResult SaveSetting() { throw new NotImplementedException(); }