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上下文中。