mvc5 源碼解析1:UrlRoutingModule

註冊在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG \webconfig中web

 

 

在該module源碼中mvc

 

 

咱們能夠看出註冊了application中的PostResolveRequestCache事件app

 

 

在這個方法中定義了context上下文爲httpcontextWrapper類型函數

 

 

在具體的方法中分4步this

(1)     從路由集合this.RouteCollection中獲取routedataurl

而 RouteCollection3d

 

 

是一個全局性的靜態路由表,而這個RouteTable.Routes 的值又從哪裏來呢?blog

在咱們的mvc項目中Global.asax全局文件中事件

 

 

這個就是咱們在mvc項目中註冊的路由表路由

 

 

從routes.MapRoute方法中能夠看出來返回值爲Route的集合

 

 

在返回到urlroutingmodule中GetRouteData方法

 

 

咱們會循環這個集合從集合中獲取第一個請求路由對應的routedata

查看routebase對應的GetRouteData 方法

 

 

發現這是一個抽象方法

在項目中註冊路由的時候都是Route的集合,而route正好是routebase的子類

因此到route類中查找getRoutedata方法

 

 

在route類中RouteHandler屬性都是在構造函數中注入的,因此咱們到在項目中註冊的類中查找

 

 

在這個類中

 

 

因此對應的handlerhandler爲mvcRouteHandler

(2) 獲取到對應的routehandler,從(1)中可知routehandler 爲mvcRouteHandler

(3)獲取處理請求的handler  從mvcRoutehandler中可知

 

 

返回一個mvchandler

(4) 映射handler

 

 

查找子類httpContextWrapper中實現的方法

 

 

從上文中知道 httpContextWrapper 的context屬性爲application中httpcontext

 

 

已將mvchandler映射到httpcontext上下文中。

相關文章
相關標籤/搜索