Asp.Net Core入門之自定義中間件

什麼是中間件?

這裏引用官方解釋:

       中間件是用於組成應用程序管道來處理請求和響應的組件。管道內的每一個組件都可以選擇是否將請求交給下一個組件、並在管道中調用下一個組件之前和之後執行某些操作。請求委託被用來建立請求管道,請求委託處理每一個 HTTP 請求。

       請求委託通過使用 IApplicationBuilder 類型的 Run、Map 以及 Use 擴展方法來配置,並在 Startup 類中傳給 Configure 方法 。每個單獨的請求委託都可以被指定為一個內嵌匿名方法,或其定義在一個可重用的類中。這些可重用的類被稱作 中間件 或 中間件組件。每個位於請求管道內的中間件組件負責調用管道中下一個組件,或適時短路調用鏈。

       ASP.NET 請求管道由一系列的請求委託所構成,它們一個接着一個被調用,如圖所示(該執行線程按黑色箭頭的順序執行):

 

ASP.Net Core內置很多中間件,如:靜態文件,身份驗證,MVC等。

這裏需要注意的是,中間件添加的順序非常重要,這會影響他們處理請求的順序。如果順序添加不對,很可能其中某个中間件會造成管道短路,不能觸發下一個請求委託,造成系統異常。

自定義中間件

1.自定義中間件處理邏輯。

 

 1     public class MyMiddleWare
 2     {
 3         private readonly ILogger logger;
 4         private readonly RequestDelegate next;
 5         /// <summary>
 6         /// 通過構造函數 注入Logger日誌和Http請求委託
 7         /// </summary>
 8         /// <param name="_logger"></param>
 9         /// <param name="_next"></param>
10         public MyMiddleWare(ILogger<MyMiddleWare> _logger, RequestDelegate _next)
11         {
12             logger = _logger;
13             next = _next;
14         }
15 
16         /// <summary>
17         /// 在調用下一個組件之前和之後執行某些操作
18         /// </summary>
19         /// <param name="context"></param>
20         /// <returns></returns>
21         public async Task Invoke(HttpContext context)
22         {
23             logger.LogInformation("自定義中間件,開始" + DateTime.Now);
24             await next.Invoke(context);
25             logger.LogInformation("自定義中間件,結束" + DateTime.Now);
26         }
27     }

 

2.使用IApplicationBuilder嚮應用程序的請求管道添加中間件

1     public static class ServiceExtensions
2     {
3         public static IApplicationBuilder UserMyMiddleWare(this IApplicationBuilder app)
4         {
5             return app.UseMiddleware<MyMiddleWare>();
6         }
7     }

3.通過Configure方法添加自定義中間件。

Configure 方法用於指定 ASP.NET 應用程序將如何響應每一個 HTTP 請求。中間件需要最終在這裏添加。

 1         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 2         {
 3             if (env.IsDevelopment())
 4             {
 5                 app.UseDeveloperExceptionPage();
 6             }
 7             //wwroot目錄下靜態文件
 8             app.UseStaticFiles();
 9             //添加自定義中間件
10             app.UserMyMiddleWare();
11         }

 

當然大家也可以在Configure 方法中直接使用 app.UseMiddleware<MyMiddleWare>()進行添加,我這裡是單獨做了一個派生類,方便管理吧。

 

好了,然後我們啟動程序,大家會發現我們剛才添加的中間件處理請求信息:

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

FB行銷專家,教你從零開始的技巧

您可能也會喜歡…