在.NET Core中,中間件(Middleware)是處理HTTP請求和響應的核心組件,被組織成一個請求處理管道,每個中間件都可以在請求到達最終處理程序之前或之后執行操作。可以實現如身份驗證、路由、日志記錄、異常處理、靜態文件服務等各種功能。
中間件是HTTP請求管道中的一個處理單元,負責處理傳入的HTTP請求和返回的HTTP響應。每個中間件都有如下職責:
1.處理請求:對請求進行預處理(修改請求內容、驗證身份等)。
2.決定是否繼續傳遞請求:可以選擇將請求傳遞給下一個中間件或者直接返回響應(短路請求管道)。
3.處理響應:可以在響應返回給客戶端之前進行后處理(如添加響應頭,記錄日志等)。
中間件的工作原理
1.請求進入管道:
1.當一個HTTP請求進入應用程序時,它首先通過一系列的中間件組件。
2.每個中間件都有機會處理請求,并決定是否將請求傳遞給下一個中間件。
2.中間件的執行順序:
1.按照添加的順序依次執行
3.中間件的組成:
1.通常是一個委托或者是實現了IMiddleware接口的類
4.中間件的執行流程:
1.當請求進入中間件時,中間件可以選擇處理請求并直接返回響應(短路請求管道),將請求傳遞給下一個中間件(調用next(context))
2.如果請求調用了next(context),那么請求將繼續傳遞到下一個中間件
3.當請求通過所有中間件后,最終的處理程序將處理請求并生成響應
4.響應將按照相反的順序通過中間件管道返回給客戶端
常見的中間件及其工作原理
1.身份驗證中間件(Authentication Middleware)
作用:用于處理用戶身份驗證。
工作原理:
1.在請求到達控制器之前,身份驗證中間件會驗證請求中是否包含有效的身份驗證信息(如JWT令牌、Cookie等)
2.如果身份驗證成功,中間件會將用戶信息存儲在HttpContext.User中
3.如果身份驗證失敗,重定向到登錄頁面或返回401未授權響應
示例:
public void Configure(IApplicationBuilder app)
{
app.UseAuthentication(); //啟用身份驗證
app.UseAuthorzation(); //啟用授權
}
2.路由中間件(Routing Middleware)
3.靜態文件中間件(Static Files Middleware)
4.異常處理中間件(Exception Handing Middleware)
5.日志記錄中間件(logging Middleware)
自定義中間件
創建自定義中間件來處理特定的需求。自定義中間件通常時一個類,它包含一個Invoke或InvokeAsync方法,該方法接收HttpContext和一個RequestDelegate參數
示例:
1 public class MyMiddleware 2 { 3 private readonly RequestDelegate _next; 4 5 public MyMiddleware(RequestDelegate next) 6 { 7 _next = next; 8 } 9 10 public async task InvokeAsync(HttpContext context) 11 { 12 //在調用下一個中間件之前執行的操作 13 await context.Response.WriteAsync("MyMiddleware: Befor \n"); 14 15 //調用下一個中間件 16 await _next(context); 17 18 //在調用下一個中間件之后執行的操作 19 await context.Response.WriteAsync("MyMiddleware: Befor \n"); 20 } 21 }
浙公網安備 33010602011771號