2021年3月21日 星期日

ASP.NET Core 3.1 自訂 Middleware 類別

前面文章大概說明了甚麼是 Middleware,針對 pipeline 可加入相關元件,

進而進行相關邏輯運算...等,所以這篇就介紹如何自訂屬於自己的 Middleware 類別。


進入文章主題前,先看一下,為什麼需要使用 Middleware 方式在pipeline 加入元件,

因為若是使用呼叫一般類別的方法,是不會在每次的 pipeline(request\response) 中都

被執行到,而是站台跑起來的時僅被執行一次,之後就沒作用,以下是模擬程式。


利用空白的asp.net core 專案,在Startup.cs 加入以下程式,

一開始加入一個 middleware ,後面單純呼叫方法寫檔,最後的Endpoints 也會寫入Hello World 文字

至檔案中



當城市跑起來,期望應該所有的文字都會寫到,如下圖所示


以上,可看出是 no middleware 先被寫入,很合理;接著再

瀏覽器開心分頁,輸入網址執行,理論上應該就不會有 

no middleware 的文字被寫入,如下圖


以上就是說明要在pipeline 加入動作,就需要使用Middleware 。


接下來介紹自訂 Middleware,因為客製化的Middlewrae 都會有一定程度的邏輯,

所以不太可能像前篇一樣,所以會透過設計類別或其他方式實作。


先開啟一個WebApi 專案,在Startup.cs 類別檔中預設會加入一些 Middleware,如下圖


接著來自訂自己的 Middleware


使用app.UseMiddleware<T>() 方法加入:


首先新增類別 MyMiddleware ,接著繼承 IMiddleware 介面,並且實作 InvokeAsync 方法,

然後使其為 asyne,如下圖所示


後續到 Startup.cs 類別中使用


記得要先在 ConfigureServices 注入 MyMiddleware ,再到 Configure 使用 UseMiddleware() 方法加入。

關於相依注入的部分,可參考之前文章。



最後Run 專案


另一種自訂類別但不實作 IMiddleware 介面,這類的無須 serivce 注入即可使用



輸出結果



注意若使用 UseEndpoints ,piplie僅會走一次 ,這邊僅聚焦 Middleware 的客製化部分,

其他細節就不著墨了。




使用擴充方法加入:


新增類別 RequestMyMiddlewareExtensions ,以下是實作內容,也會印出相同結果




其他還有透過工廠方法的方式,可以參考以下連結


 

沒有留言:

張貼留言