當前位置: 妍妍網 > 碼農

.NET Core中的中介軟體概念及自訂中介軟體的開發

2024-06-26碼農

一、中介軟體概念簡介

在.NET Core中,中介軟體扮演著至關重要的角色,它們是處理HTTP請求和響應的元件。當一個HTTP請求到達.NET Core Web應用程式時,它會透過一系列註冊的中介軟體元件,每個中介軟體都可以對請求進行處理,或者將請求傳遞給下一個中介軟體。這種設計提供了一種靈活且可延伸的方式來構建Web應用程式的請求處理管道。

中介軟體通常用於執行身份驗證、日誌記錄、例外處理、路由等功能。它們可以按照特定的順序進行註冊,並在請求處理過程中依次執行。每個中介軟體都可以控制是否將請求傳遞給下一個中介軟體,或者在處理完請求後直接生成響應。

二、中介軟體的工作原理

在.NET Core中,中介軟體是透過 IApplicationBuilder 介面進行註冊的。每個中介軟體本質上是一個接受 HttpContext 參數並返回一個 Task 的委托(或Lambda運算式)。當請求到達時,它會依次透過每個註冊的中介軟體,直到某個中介軟體生成響應或請求被完全處理。

中介軟體的執行流程如下:

  1. 請求到達應用程式。

  2. 請求透過第一個中介軟體。

  3. 中介軟體處理請求或將其傳遞給下一個中介軟體。

  4. 如果中介軟體決定不傳遞請求,則生成響應並返回給客戶端。

  5. 如果中介軟體將請求傳遞給下一個中介軟體,則重復步驟3和4,直到所有中介軟體都被執行或響應被生成。

三、建立自訂中介軟體

建立自訂中介軟體是擴充套件.NET Core Web應用程式功能的一種強大方式。下面我們將透過一個簡單的範例來演示如何建立和使用自訂中介軟體。

範例:建立一個簡單的日誌記錄中介軟體

  1. 定義中介軟體類

首先,我們定義一個名為 LoggingMiddleware 的中介軟體類,它將在請求處理過程中記錄一些基本資訊。

using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
public classLoggingMiddleware
{
privatereadonly RequestDelegate _next;
privatereadonly ILogger<LoggingMiddleware> _logger;
publicLoggingMiddleware(RequestDelegate next, ILogger<LoggingMiddleware> logger)
{
_next = next;
_logger = logger;
}
publicasync Task InvokeAsync(HttpContext context)
{
// 在請求開始時記錄日誌
_logger.LogInformation("Request started: {RequestMethod} {RequestPath}", context.Request.Method, context.Request.Path);
// 呼叫下一個中介軟體
await _next(context);
// 在請求結束時記錄日誌(註意:這將在響應發送給客戶端之後執行)
_logger.LogInformation("Request ended: {RequestMethod} {RequestPath}", context.Request.Method, context.Request.Path);
}
}



  1. 在Startup類中註冊中介軟體

接下來,我們需要在 Startup 類的 Configure 方法中註冊我們的自訂中介軟體。

public classStartup
{
// ... 其他配置 ...
publicvoidConfigure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
// ... 其他中介軟體配置 ...
// 註冊日誌記錄中介軟體
app.UseMiddleware<LoggingMiddleware>();
// ... 其他中介軟體配置 ...
}
}

或者,您也可以使用擴充套件方法來註冊中介軟體,使其更加簡潔和可重用。

publicstatic classLoggingMiddlewareExtensions
{
publicstatic IApplicationBuilder UseLoggingMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<LoggingMiddleware>();
}
}
// 然後在Startup類中這樣使用:
app.UseLoggingMiddleware();

  1. 測試中介軟體

啟動應用程式並行送請求。您應該能夠在日誌輸出中看到自訂中介軟體記錄的請求開始和結束的日誌資訊。這證明了自訂中介軟體已成功整合到請求處理管道中。

四、結論

透過本文的介紹和範例程式碼的實踐套用,我們可以看到在.NET Core中建立和使用自訂中介軟體的簡單性和靈活性。中介軟體為開發者提供了一種強大的方式來擴充套件和客製Web應用程式的請求處理邏輯。無論是用於日誌記錄、身份驗證、例外處理還是其他任何目的,中介軟體都是.NET Core Web應用程式中不可或缺的一部份。隨著.NET Core的不斷發展,中介軟體將繼續在構建高效、可延伸的Web應用程式中發揮關鍵作用。