根據講師所講總結了一下(可能存在些描述錯誤)
-------------mvc進入asp.net管道原理: (在執行httpapplication管道之前mvc和asp.net是相同的,不同之處在于管道第七個事件對http請求進行了重定向,交給了現有的mvchandler實例,而不是asp.net模型中自己創建的一個httpHander;)
1.當網站啟動執行application_start方法,注冊路由規則;先創建了一個mvcRouteHandler路由處理器實例(它獲取最終處理http
請求的httpHandler處理器)給route路由實例的Routehandler屬性中去了;而這個屬性又放到了RouteData路由數據對象的
RouteHandler屬性中去了;
2.當請求開始到asp.net httpapplication管道中的第七個事件時將http請求重定向為一個現有的mvchttpHandler處理器實例;在 第七個事件和第八個事件之間,會判斷http請求是否指定了處理器,如果指定了就不會創建。這樣httpcontext就被mvc處理過濾 截獲了,而不會在走asp.net的handler。
3.在第七個事件,會將所有的在.netframework注冊的httpModule初始化,調用每一個init方法。當然在.net4.0在配置文件中注冊
了urlroutingModule。當執行它的init方法時,就會行UrlRouteModule事件響應方法,而在這個方法內部便實現了http請求的重定
向,而處理器則是mvchandler;首先在事件響應方法中,會遍歷注冊的路由并將請求url進行匹配,一旦匹配上這時就會獲取路由規
則的路由數據對象RouteData;(在1中,可以知道最終的httphandler便在這個數據對象中)從數據對象的routehandler屬性獲取
mvcroutehandler的實例,在從這個實例的getHttpHandler方法獲取最終的mvchandler即最終的httphandler;
4.在mvchandler中:內部創建控制器工廠,并獲得控制器實例,執行action,返回視圖進行渲染,再response流給客戶端;
5.在11和12個事件之間執行mvchandler的pr方法。在pr方法內根據httcontext創建控制器工廠 實例和并由工廠創建控制器實例;之后調用控制器的execute方法(內部就是調用了invokeaction);執行完action后 獲取actionresult,并調用它的executeResult方法;找到對應的視圖引擎,并調用引擎的render渲染方法;
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
