1、网址路由比对
2、执行Controller
与Action
3、执行View
并返回结果
Request
请求到来- IIS 根据请求特征将处理权移交给 ASP.NET
UrlRoutingModule
将当前请求在 Route Table中进行匹配UrlRoutingModule
在RouteCollection
中查找Request
匹配的RouteHandler
,默认是MvcRouteHandler
,MvcRouteHandler
创建MvcHandler
实例.MvcHandler
执行ProcessRequest
.MvcHandler
使用IControllerFactory
获得实现了IController
接口的实例,找到对应的HomeController
- 根据
Request
触发HomeController
的Index
方法 Index
将执行结果存放在ViewData
HomeController
的Index
方法返回ActionResult
Views/Home/Index.aspx
将ViewData
呈现在页面上Index.aspx
执行ProcessRequest
方法Index.aspx
执行Render
方法输出到客户端
在使用MVC中是由IgnoreRoute()
辅助方法对比成功的,会导致程序直接跳离MVC的执行生命周期,将程序继续执行的权利交回给IIS,由IIS决定接下来应该由哪个模块或哪个处理例程(Handler
)来执行。
阶段 | 详细 |
---|---|
接收应用程序的第一次请求 | 在Global.asax 文件中, Route对象 被添加到RouteTable对象. |
执行路由选择 | UrlRoutingModule 模块使用第一个在RouteTable 集合中匹配的Route 对象来创建RouteData对象, 然后它将使用这个RouteData对象来创建RequestContext (IHttpContext)对象. |
创建MVC request handler | MvcRouteHandler 创建MvcHandler类的一个实例,并且将它传递给RequestContext实例. |
创建controller | MvcHandler对象使用RequestContext实例来确认IControllerFactory 对象(DefaultControllerFactory类的一个实例) ,以用来创建conteoller实例。 |
执行controller | MvcHandler 实例调用controller的执行method. |
调用action | 大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法. |
执行result | 大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法. |
生命周期步骤概览
当我们对ASP.NET MVC
网站发出一个请求的时候,会发生5个主要步骤:
步骤1:创建RouteTable
当ASP.NET应用程序第一次启动的时候才会发生第一步。RouteTable
把URL
映射到Handler
。
步骤2:UrlRoutingModule
拦截请求
第二步在我们发起请求的时候发生。UrlRoutingModule
拦截了每一个请求并且创建和执行合适的Handler
。
步骤3:执行MvcHandler
MvcHandler
创建了控制器,并且把控制器传入ControllerContext
,然后执行控制器。
步骤4:执行控制器
控制器检测要执行的控制器方法,构建参数列表并且执行方法。
步骤5:调用RenderView
方法
大多数情况下,控制器方法调用RenderView()
来把内容呈现回浏览器。
Controller.RenderView()
方法把这个工作委托给某个ViewEngine
来做。