91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET Core中如何使用Map/MapWhen擴展方法

發布時間:2021-12-29 19:47:55 來源:億速云 閱讀:308 作者:柒染 欄目:大數據

本篇文章為大家展示了.NET Core中如何使用Map/MapWhen擴展方法,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

0x00 為什么需要Map(MapWhen)擴展

如果業務邏輯比較簡單的話,一條主管道就夠了,確實用不到Map。不過當業務邏輯比較復雜的時候,有時候我們可能希望根據情況的不同使用特殊的一組中間件來處理HttpContext。這種情況下如果只用一條管道,處理起來會非常麻煩和混亂。此時就可以使用Map/MapWhen建立一個分支管道,當條件符合我們的設定時,由這個分支管道來處理HttpContext。使用Map/MapWhen添加分支管道是很容易的,只要提供合適跳轉到分支管道的判斷邏輯,以及分支管道的構建方法就可以了。

.NET Core中如何使用Map/MapWhen擴展方法

0x01 Map擴展的原理

前一篇文章中我們說過,中間件的注冊和管道的構建都是通過ApplicationBuilder進行的。因此要構建一個分支管道,需要一個新的ApplicationBuilder,并用它來注冊中間件,構建管道。為了在分支管道中也能夠共享我們在當前ApplicationBuilder中注冊的服務(或是說共享依賴注入容器,當然共享的并不止這些),在創建新的ApplicationBuilder時并不是直接new一個全新的,而是調用當前ApplicationBuilder的New方法在當前的基礎上創建新的,共享了當前ApplicationBuilder的Properties(其中包含了依賴注入容器)。

在使用Map注冊中間件時我們會傳入一個Action<IApplicationBuilder>參數,它的作用就是,當我們創建了新的ApplicationBuilder后,使用這個方法對其進行各種設置,最重要的就是在新的ApplicationBuilder上注冊分支管道的中間件。配置完成后調用分支ApplicationBuilder的Builder方法構建管道,并把第一個中間件保存下來作為分支管道的入口。

在使用Map注冊中間件時傳入了一個PathString參數,PathString對象我們可以簡單地認為是string。它用于記錄HttpContext.HttpRequest.Path中要匹配的區段(Segment)。這個字符串參數結尾不能是“/”。如果匹配成功則進入分支管道,匹配失則敗繼續當前管道。

新構建的管道和用于匹配的字符串保存為MapOptions對象,保存了Map規則和分支管道的入口。之后構建MapMiddleware對象,并把它的Invoke方法包裝為RequestDelegate,使用當前ApplicationBuilder的Use方法注冊中間件。

下面是Map擴展方法:

.NET Core中如何使用Map/MapWhen擴展方法

下面是MapMiddleware的Invoke方法

.NET Core中如何使用Map/MapWhen擴展方法

0x02 MapWhen擴展的原理

Map主要通過URL中的Path來判斷是否需要進入分支管道,但有時候我們很可能會有別的需求,例如我想對所有Method為DELETE的請求用特殊管道處理。這時候就需要用MapWhen了。MapWhen是一種通用的Map,可以由使用者來決定什么時候進入分支管道什么時候不進入。可以說Map是MapWhen的一種情況,因為這種情況太常見了,所以官方實現了一個。這樣看來MapWhen就很簡單了,在Map中我們傳入參數PathString來進行HttpRequest.Path的匹配,在MapWhen中我們傳入Func<HttpContext,bool>參數,有我們自行指定,當返回true時進入分支管道,返回false則繼續當前管道。

下面是MapWhen擴展方法: .NET Core中如何使用Map/MapWhen擴展方法

下面是MapWhenMiddleware的Invoke方法:

.NET Core中如何使用Map/MapWhen擴展方法

0x03 順便提一下Run擴展

還有一個注冊中間件的擴展方法是Run,因為非常簡單,所以在最后提一下。Run就是用Use注冊一個中間件,最后不調用下一個中間件直接返回。所以使用Run擴展方法注冊中間件永遠都是直接返回的,后面的中間件都不會被調用。

.NET Core中如何使用Map/MapWhen擴展方法

上述內容就是.NET Core中如何使用Map/MapWhen擴展方法,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

托克逊县| 南郑县| 清新县| 通江县| 济源市| 哈密市| 射洪县| 图们市| 崇信县| 舟山市| 肥东县| 萨嘎县| 凤阳县| 吴江市| 南岸区| 离岛区| 尼玛县| 濮阳县| 疏勒县| 施秉县| 临夏县| 于都县| 福鼎市| 清远市| 颍上县| 舞钢市| 当涂县| 新竹县| 宕昌县| 比如县| 平和县| 昭苏县| 栾川县| 桃园县| 肥城市| 河西区| 沾化县| 沙河市| 曲阜市| 耿马| 高青县|