共用方式為


模組、處理常式和中介軟體

提示

本內容節錄自《Blazor for ASP NET Web Forms Developers for Azure》電子書,可以從 .NET Docs 取得,也可以免費下載 PDF 離線閱讀。

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

ASP.NET Core 應用程式的建置是以一系列的中介軟體為基礎。 中介軟體是排列成管線來處理要求和回應的處理常式。 在 Web Form 應用程式中,HTTP 處理常式和模組可以解決類似問題。 在 ASP.NET Core 中,模組、處理常式、Global.asax.cs 和應用程式生命週期均已取代為中介軟體。 在本章中,您將了解 Blazor 應用程式執行內容中的中介軟體。

概觀

ASP.NET Core 要求管線由要求委派序列組成,並會一個接著一個呼叫。 下圖說明此概念。 執行緒遵循黑色箭號執行。

pipeline

上圖缺少生命週期事件的概念。 這個概念是處理 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 中介軟體