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来做。