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