模組、處理常式和中介軟體
提示
本內容節錄自《Blazor for ASP NET Web Forms Developers for Azure》電子書,可以從 .NET Docs 取得,也可以免費下載 PDF 離線閱讀。
ASP.NET Core 應用程式的建置是以一系列的中介軟體為基礎。 中介軟體是排列成管線來處理要求和回應的處理常式。 在 Web Form 應用程式中,HTTP 處理常式和模組可以解決類似問題。 在 ASP.NET Core 中,模組、處理常式、Global.asax.cs 和應用程式生命週期均已取代為中介軟體。 在本章中,您將了解 Blazor 應用程式執行內容中的中介軟體。
概觀
ASP.NET Core 要求管線由要求委派序列組成,並會一個接著一個呼叫。 下圖說明此概念。 執行緒遵循黑色箭號執行。
上圖缺少生命週期事件的概念。 這個概念是處理 ASP.NET Web Forms 要求的基礎。 此系統可讓您更輕鬆地推斷發生哪些流程,並允許在任何點插入中介軟體。 中介軟體會依新增至要求管線的順序執行。 它們也會在程式碼中新增,而不是設定檔,通常是在 Startup.cs 中。
Katana
熟悉 Katana 的讀者會覺得 ASP.NET Core 很容易上手。 事實上,Katana 是一種架構,而 ASP.NET Core 衍生自此架構。 它引進了 ASP.NET 4.x 的類似中介軟體和管線模式。 針對 Katana 設計的中介軟體可以調整為使用 ASP.NET Core 管線。
通用中介軟體
ASP.NET 4.x 包含許多模組。 同樣地,ASP.NET Core 也有許多可用的中介軟體元件。 在某些情況下,IIS 模組可與 ASP.NET Core 搭配使用。 在其他情況下,可以使用原生 ASP.NET Core 中介軟體。
下表列出 ASP.NET Core 中的取代中介軟體和元件。
模組 | ASP.NET 4.x 模組 | ASP.NET Core 選項 |
---|---|---|
HTTP 錯誤 | CustomErrorModule |
狀態碼頁面中介軟體 |
預設文件 | DefaultDocumentModule |
預設檔案中介軟體 |
瀏覽目錄 | DirectoryListingModule |
目錄瀏覽中介軟體 |
動態壓縮 | DynamicCompressionModule |
回應壓縮中介軟體 |
失敗的要求追蹤 | FailedRequestsTracingModule |
ASP.NET Core 記錄 |
檔案快取 | FileCacheModule |
回應快取中介軟體 |
HTTP 快取 | HttpCacheModule |
回應快取中介軟體 |
HTTP 記錄 | HttpLoggingModule |
ASP.NET Core 記錄 |
HTTP 重新導向 | HttpRedirectionModule |
URL 重寫中介軟體 |
ISAPI 篩選器 | IsapiFilterModule |
中介軟體 |
ISAPI | IsapiModule |
中介軟體 |
要求篩選 | RequestFilteringModule |
URL 重寫中介軟體 IRule |
URL 重寫† | RewriteModule |
URL 重寫中介軟體 |
靜態壓縮 | StaticCompressionModule |
回應壓縮中介軟體 |
靜態內容 | StaticFileModule |
靜態檔案中介軟體 |
URL 授權 | UrlAuthorizationModule |
ASP.NET Core 身分識別 |
這份清單並不完整,但應該可以讓您了解兩個架構之間的對應。 如需更詳細的清單,請參閱使用 ASP.NET Core 的 IIS 模組。
自訂中介軟體
內建中介軟體可能無法處理應用程式所需的所有案例。 在這種情況下,就可以建立您自己的中介軟體。 有多種方式可以定義中介軟體,最簡單的方式是簡單委派。 請考慮下列中介軟體,這些中介軟體會接受來自查詢字串的文化特性要求:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
var cultureQuery = context.Request.Query["culture"];
if (!string.IsNullOrWhiteSpace(cultureQuery))
{
var culture = new CultureInfo(cultureQuery);
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
}
// Call the next delegate/middleware in the pipeline
await next();
});
app.Run(async (context) =>
await context.Response.WriteAsync(
$"Hello {CultureInfo.CurrentCulture.DisplayName}"));
}
}
中介軟體也可以藉由實作 IMiddleware
介面或下列中介軟體慣例的方式,定義為類別。 如需詳細資訊,請參閱撰寫自訂 ASP.NET Core 中介軟體。