雖然ASP.NET Core應(yīng)用的路由是通過RouterMiddleware這個(gè)中間件來完成的,但是具體的路由解析功能都落在指定的Router對(duì)象上,不過我們依然有必要以代碼實(shí)現(xiàn)的角度來介紹一下這個(gè)中間件。在這之前,我們先來認(rèn)識(shí)一個(gè)特殊的特性。[本文已經(jīng)同步到《ASP.NET Core框架揭秘》之中]
讓RouterMiddleware中間件委托Router完整整個(gè)路由工作之后,解析出來的路由參數(shù)會(huì)以一個(gè)RouteData對(duì)象的形式存儲(chǔ)在RouteContext上下文中。但是RouteContext是為Router的執(zhí)行建立的上下文,路由解析工作完成之后,這個(gè)上下文的生命周期也隨著結(jié)束,既然整個(gè)RouteContext上下文都不存在了,請(qǐng)求處理的后續(xù)步驟如何獲取這個(gè)RouteData對(duì)象呢?
通過《注冊(cè)URL模式與HttpHandler的映射關(guān)系》的實(shí)例演示我們知道可以調(diào)用HttpContext的擴(kuò)展方法GetRouteData來獲取這個(gè)包含素所有路由參數(shù)的RouteData對(duì)象,這個(gè)意味著原本依附于RouteContext上下文的RouteData最終會(huì)被附加到代表當(dāng)前請(qǐng)求上下文的HttpContext上,而具體承載這個(gè)RouteData的就是這個(gè)名為RoutingFeature的特性。RoutingFeature是我們對(duì)所有實(shí)現(xiàn)了IRoutingFeature接口的所有類型以及對(duì)應(yīng)對(duì)象的統(tǒng)稱。如下面的代碼片段所示,這個(gè)接口通過屬性RouteData來保存最終附加到HttpContext的RouteData。RoutingFeature類是這個(gè)接口的默認(rèn)實(shí)現(xiàn)者,我們的RouterMiddleware默認(rèn)情況下就是使用這個(gè)對(duì)象。
1: public interface IRoutingFeature
2: {
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26