次の方法で共有


モジュール、ハンドラー、ミドルウェア

ヒント

このコンテンツは電子ブック、Azure の「ASP.NET Web Forms 開発者向け Blazor」からの抜粋です。これは .NET Docs から閲覧するか、オフラインで読める無料ダウンロードの PDF としても入手できます。

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

ASP.NET Core アプリは一連のミドルウェアに基づいて構築されます。 ミドルウェアは、要求と応答を処理するためにパイプラインに配置されるハンドラーです。 Web Forms アプリでは、HTTP ハンドラーとモジュールによって同様の問題が解決されます。 ASP.NET Core では、モジュール、ハンドラー、global.asax、およびアプリのライフ サイクルはミドルウェアに置き換えられます。 この章では、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 にも多くのミドルウェア コンポーネントが用意されています。 ASP.NET Core を使用した特定の事例では、IIS モジュールを使用できます。 他の事例では、ネイティブ 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 ID

この一覧は完全に網羅したものではありませんが、2 つのフレームワーク間にどのようなマッピングが存在するのかを把握できるはずです。 詳細な一覧については、「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 ミドルウェアを記述する」を参照してください。