當前位置: 妍妍網 > 碼農

ASP.NET Core 中的攔截器:實作請求的中間處理

2024-05-13碼農

在ASP.NET Core中,攔截器(或稱中介軟體)是處理HTTP請求管道中的關鍵元件。它們允許開發者在請求到達控制器或檢視之前,以及響應發送回客戶端之前,執行自訂的邏輯。雖然ASP.NET Core沒有名為「攔截器」的明確概念,如同Java的Spring框架中的攔截器,但可以透過中介軟體來實作類似的功能。

一、中介軟體的概念

在ASP.NET Core中,中介軟體是一個處理HTTP請求和響應的元件。它是一個輕量級的、可插入的、用於處理HTTP請求和響應的管道。當ASP.NET Core接收到一個HTTP請求時,它會按照在Startup類中定義的順序呼叫註冊的中介軟體。每個中介軟體都可以控制是否將請求傳遞給管道中的下一個中介軟體,或者是否直接生成並返回一個響應。

二、建立自訂中介軟體

建立自訂中介軟體有幾種方法,其中最簡單的是使用行內中介軟體。下面是一個簡單的範例,展示了如何建立一個記錄請求時間的中介軟體:

public classRequestTimingMiddleware
{
privatereadonly RequestDelegate _next;
privatereadonly ILogger _logger;
publicRequestTimingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
{
_next = next;
_logger = loggerFactory.CreateLogger<RequestTimingMiddleware>();
}
publicasync Task InvokeAsync(HttpContext context)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
await _next(context);
stopwatch.Stop();
_logger.LogInformation($"Request took {stopwatch.ElapsedMilliseconds} ms");
}
}


三、在Startup類中註冊中介軟體

建立了自訂中介軟體後,你需要在Startup類的 Configure 方法中註冊它。以下是如何在ASP.NET Core套用中註冊中介軟體的範例:

public classStartup
{
publicvoidConfigureServices(IServiceCollection services)
{
// 添加其他服務...
}
publicvoidConfigure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
// 其他中介軟體配置...
app.UseMiddleware<RequestTimingMiddleware>(); // 註冊自訂中介軟體
// 其他中介軟體配置...
app.UseRouting();
app.UseEndpoints(endpoints => { /* 配置端點 */ });
}
}

四、中介軟體的執行順序

中介軟體的執行順序非常重要。在 Configure 方法中註冊中介軟體的順序決定了它們處理請求的順序。當請求到達時,它會依次透過每個註冊的中介軟體,直到達到管道的末端或某個中介軟體決定結束請求。響應也是以相反的順序透過中介軟體返回給客戶端。

五、使用IApplicationBuilder的擴充套件方法註冊中介軟體

除了直接使用 UseMiddleware<T> 方法外,你還可以建立擴充套件方法來簡化中介軟體的註冊過程。例如:

publicstatic classMiddlewareExtensions
{
publicstatic IApplicationBuilder UseRequestTiming(this IApplicationBuilder builder, ILoggerFactory loggerFactory)
{
return builder.UseMiddleware<RequestTimingMiddleware>(loggerFactory);
}
}

然後在 Configure 方法中使用這個擴充套件方法:

publicvoidConfigure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
// 其他中介軟體配置...
app.UseRequestTiming(loggerFactory); // 使用擴充套件方法註冊自訂中介軟體
// 其他中介軟體配置...
}

六、結論

在ASP.NET Core中,中介軟體是實作請求攔截和處理的關鍵元件。透過建立自訂中介軟體,開發者可以在請求管道中插入自訂的邏輯,從而實作請求和響應的攔截、修改或記錄等操作。掌握中介軟體的使用是構建高效、可延伸的ASP.NET Core套用的重要一環。