ASP.NET MVC 小牛之旅4:ASP.NET MVC的運行生命周期


ASP.NET MVC的運行生命周期大致分成三大過程:(1)網址路由對比。 (2)運行Controller與Action。 (3)運行View並回傳結果

4.1網址路由對比

當iis收到http請求后,會先通過UrlRoutingModule模塊處理所有與網址路由有關的運算。默認情況下,如果該網址可以對應到相對於網站根目錄下的實體文檔,則不會通過ASP.NET MVC進行處理,會自動略過所有的網址路由對比,而是直接交給IIS或ASP.NET運行。

如果要改變這個UrlRoutingModule的默認對比行為,讓所有從客戶端瀏覽器發送到iis的http請求全部要經過UrlRoutingModule模塊進行路由規則判斷的話,可以在Global.asax的Application_Start()事件最前面將 RouteTable.Routes.RouteExistingFiles = true即可。如圖所示:

設置后這樣網站的所有收到的http請求都會以在RegisterRoutes定義的網址路由規則進行一一對比,如果對比成功,就會以ASP.NET MVC的行為進行處理,默認交給MvcHandler來運行,如果失敗,機會將運行的權力交給IIS負責。

4.2運行Controller與Action

當程序運行到MvcHandler之后,我們知道所有HttpHandler運行的入口點就是ProcessRequest方法,運行該ControllerExecute()方法最后會運行到ExecuteCode()方法時,會通過路由值來決定運行Controller里的哪個Action,如果從Controller類別中找不到Action可以運行時,就會運行HandleUnknownAction

方法,有個繼承自ActionResult的型別叫ViewResult,如果該Action回傳的型別為ViewResult的話,就會還有下一個小節的流程要執行,並不是運行return View()的時候就結束,否則就會通過實際繼承自ActionResult的對象去運行結果並響應至客戶端。

4.3運行View並回傳結果

如果從Action回傳的ActionResult對象為ViewResult的話,ASP.NET MVC會進一步調用實作IViewEngine界面的對象實體的FindView方法,以取得一個實作IView界面的對象實體,然后調用IVew對象實體的Render()方法響應HTML到客戶端。

4.4MVC執行步驟概覽圖示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM