一、簡介
????????中間件可以用于鑒權、日志,攔截器可以用于指定方法或url的業務邏輯處理,兩者分工不同,實現效果相似,先執行中間件,后執行攔截器,再到WebAPI接口。
二、示例
? ? ? ? 一個Token驗證中間件
三、代碼
1.Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){// 省略其余代碼// 注冊 Token 校驗中間件(示例)app.UseMiddleware<TokenValidationMiddleware>();// 省略其余代碼}
2.TokenValidationMiddleware.cs
public class TokenValidationMiddleware
{private readonly RequestDelegate _next;private readonly ILogger<TokenValidationMiddleware> _logger;public TokenValidationMiddleware(RequestDelegate next, ILogger<TokenValidationMiddleware> logger){_next = next;_logger = logger;}public async Task InvokeAsync(HttpContext context){try{// 檢查 URL 是否以 api/getbook 開頭if (context.Request.Path.StartsWithSegments("/api/DemoService/GetCityData")){var token = context.Request.Headers["Authorization"].FirstOrDefault();if (string.IsNullOrEmpty(token) || !ValidateToken(token)){// 如果沒有Token或Token無效,返回未授權錯誤context.Response.StatusCode = StatusCodes.Status401Unauthorized;await context.Response.WriteAsync("授權錯誤!");return;}}// 如果Token有效或路徑不匹配,則繼續執行下一個中間件await _next(context);}catch (System.Exception ex){_logger.LogError(ex.ToString());}}// Token 校驗邏輯(僅示例)private bool ValidateToken(string token){return token == "123456";}
}
?