1. 程式人生 > >跟我一起學.NetCore之中介軟體(Middleware)簡介和解析請求管道構建

跟我一起學.NetCore之中介軟體(Middleware)簡介和解析請求管道構建

**前言** 中介軟體(Middleware)對於Asp.NetCore專案來說,不能說重要,而是不能缺少,因為Asp.NetCore的請求管道就是通過一系列的中介軟體組成的;在伺服器接收到請求之後,請求會經過請求管道進行相關的過濾或處理; **正文** 那中介軟體是那路大神? 會經常聽說,需要註冊一下中介軟體,如圖: ![img](https://i.loli.net/2020/09/03/9pGh3Byob5MVNlw.png) 所以說,中介軟體是針對請求進行某種功能需求封裝的元件,而這個元件可以控制是否繼續執行下一個中介軟體;如上圖中的app.UserStaticFiles()就是註冊靜態檔案處理的中介軟體,在請求管道中就會處理對應的請求,如果沒有靜態檔案中介軟體,那就處理不了靜態檔案(如html、css等);這也是Asp.NetCore與Asp.Net不一樣的地方,前者是根據需求新增對應的中介軟體,而後者是提前就全部準備好了,不管用不用,反正都要路過,這也是Asp.NetCore效能比較好的原因之一; 而對於中介軟體執行邏輯,官方有一個經典的圖: ![img](https://i.loli.net/2020/09/03/Fr8mX1DQNltWgMy.png) 如圖所示,請求管道由一個個中介軟體(Middleware)組成,每個中介軟體可以在請求和響應中進行相關的邏輯處理,在有需要的情況下,當前的中介軟體可以不傳遞到下一個中介軟體,從而實現斷路;如果這個不太好理解,如下圖: ![img](https://i.loli.net/2020/09/03/5bR4cFM87wiOJBy.png) 每層外圈代表一箇中間件,黑圈代表最終的Action方法,當請求過來時,會依次經過中介軟體,Action處理完成後,返回響應時也依次經過對應的中介軟體,而執行的順序如箭頭所示;(這裡省去了一些其他邏輯,只說中介軟體)。 好了好了,理論說不好,擔心把看到的小夥伴繞進去了,就先到這吧,接下來從程式碼中看看中介軟體及請求管道是如何實現的;老規矩,找不到下手的地方,就先找能"摸"的到的地方,這裡就先扒靜態檔案的中介軟體: ![img](https://i.loli.net/2020/09/03/gTdAlaMeDyRmNzP.png) ```C# namespace Microsoft.AspNetCore.Builder { public static class StaticFileExtensions { // 呼叫就是這個擴充套件方法 public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder app) { if (app == null) { throw new ArgumentNullException(nameof(app)); } // 這裡呼叫了 IApplicationBuilder 的擴充套件方法 return app.UseMi