下面分层次的总结Controller 处理流程:
1. 页面处理流程
发送请求 –> UrlRoutingModule捕获请求 –> MvcRouteHandler.GetHttpHandler() –>
MvcHandler.ProcessRequest()
2.MvcHandler.ProcessRequest() 处理流程:
使用工厂方法获取具体的Controller –> Controller.Execute() –> 释放Controller对象
3.Controller.Execute() 处理流程
获取Action –> 调用Action方法获取返回的ActionResult –> 调用ActionResult.ExecuteResult() 方法
4.ActionResult.ExecuteResult() 处理流程
获取IView对象-> 根据IView对象中的页面路径获取Page类-> 调用IView.RenderView() 方法(内部调用
Page.RenderView方法)
通过对MVC源代码的分析,我们了解到Controller对象的职责是传递数据,获取View对象(实现了IView接口的
类),通知View对象显示.
View对象的作用是显示.虽然显示的方法RenderView()是由Controller调用的,但是Controller仅仅是一个"
指挥官"的作用, 具体的显示逻辑仍然在View对象中.
需要注意IView接口与具体的ViewPage之间的联系.在Controller和View之间还存在着IView对象.对于
ASP.NET程序提供了WebFormView对象实现了IView接口.WebFormView负责根据虚拟目录获取具体的Page类,然
后调用Page.RenderView().
类名 抽象类 父类 功能
ContentResult 根据内容的类型和编码,数据内容.
EmptyResult 空方法.
FileResult abstract 写入文件内容,具体的写入方式在派生类中.
FileContentResult FileResult 通过 文件byte[] 写入文件.
FilePathResult FileResult 通过 文件路径 写入文件.
FileStreamResult FileResult 通过 文件Stream 写入文件.
HttpUnauthorizedResult 抛出401错误
JavaScriptResult 返回javascript文件
JsonResult 返回Json格式的数据
RedirectResult 使用Response.Redirect重定向页面
RedirectToRouteResult 根据Route规则重定向页面
ViewResultBase abstract 调用IView.Render()
PartialViewResult ViewResultBase 调用父类ViewResultBase 的ExecuteResult方法.
重写了父类的FindView方法.
寻找用户控件.ascx文件
ViewResult ViewResultBase 调用父类ViewResultBase 的ExecuteResult方法.
重写了父类的FindView方法.
寻找页面.aspx文件
Filter的具体生存周期
这是官方站的一数据.
来自controller虚方法 的OnActionExecuting .
应用于当前Controller的Filter中的OnActionExecuting:
先执行基类的,后执派生类的
执行应用于Action的Filter的OnActionExecuting顺序:
先执行基类的,后执派生类的
Action 方法
应用于Action的Filter的OnActionExecuted 的执行顺序
先执行派生类的,后执行基类的
应用于当前Controller的Filter中的OnActionExecuted方法
先执行派生类的,后执行基类的
Controller中的虚方法 OnActionExecuted
介绍
System.Web.Routing - 此命名空间提供用于 URL 路由的类,通过该类可以使用不映射到物理文件的 URL
IRouteHandler - 路由处理程序接口,自定义的路由处理程序都要实现这个接口
RequestContext - 封装所请求的路由的相关信息和当前的 http 上下文信息
RouteData - 所请求的路由的相关信息
RouteCollection - 路由集合
RouteValueDictionary - 不区分大小写的 key/value 字典表
Route - 路由的相关信息