[ASP.NET MVC2 系列]
[ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分鐘內用ASP.Net MVC建立一個電影資料庫應用程式》
[ASP.NET MVC2 系列] ASP.Net MVC教程之《ASP.NET MVC 概述》
[ASP.NET MVC2 系列] 理解MVC應用程式的執行過程
[ASP.NET MVC2 系列] ASP.NET MVC Routing概述
[ASP.NET MVC2 系列] ASP.NET MVC 之如何建立自訂路由約束
[ASP.NET MVC2 系列] Action要求與View本質
[ASP.NET MVC2 系列] Action Filters以及自訂OutputCache ActionFilterAttribute事件發生次序
理解MVC應用程式執行過程
基於ASP.NET MVC Web應用程式的請求首先通過一個UrlRoutingModule的對象(HTTP模組)。這個模組匹配請求,並且執行路由選擇。這個UrlRoutingModule對象選擇第一個匹配當前請求的路由對象。如果沒有路徑匹配,這個UrlRoutingModule什麼也不做,讓這個請求返回給常規的ASP.NET或者IIS來請求處理。
從這個被選中的Route對象,UrlRoutingModule對象獲得IRouteHandler對象(IRouteHandler對象與Route對象是相互關聯的)。一般來說,在一個MVC應用程式中,它將是MvcRouteHandler執行個體。這個IRouteHandler執行個體建立一個IHttpHandler對象,並且將它傳遞給IHttpContext對象。預設情況下,MVC IHttpHandler執行個體就是MvcHandler對象。然後,這個MvcHandler對象選擇controller,controller將最終提交這個請求。
這個module 和 handler是ASP.NET MVC架構的進入點。它們執行下列行為:
選擇合適的controller。
獲得一個具體controller執行個體。
調用controller的執行方法。
下表列出了一個MVC Web項目的執行的各階段。
| 階段 |
詳細 |
| 接收應用程式的第一次請求 |
在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 |
一個典型的action 方法可能接收使用者輸入,準備合適的響應資料, 然後通過返回一個result的類型來執行這個result. 這個內建的能夠執行的result 類型 包含以下類型: ViewResult (它呈現一個視圖,並且是最常用的result類型), RedirectToRouteResult, RedirectResult, ContentResult, JsonResult以及EmptyResult. |