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