次の方法で共有


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

ヒント

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

Blazor-for-ASP-NET-Web-Forms-Developers 電子ブックのカバー サムネイル。

ASP.NET Core アプリは、一連の ミドルウェアに基づいて構築されています。 ミドルウェアは、要求と応答を処理するためにパイプラインに配置されるハンドラーです。 Web フォーム アプリでは、HTTP ハンドラーとモジュールによって同様の問題が解決されます。 ASP.NET Core では、モジュール、ハンドラー、 Global.asax.cs、アプリのライフ サイクルがミドルウェアに置き換えられます。 この章では、 Blazor アプリのコンテキストでのミドルウェアについて説明します。

概要

ASP.NET Core 要求パイプラインは、順番に呼び出される一連の要求デリゲートで構成されています。 次の図は、その概念を示しています。 実行プロセスのスレッドは黒い矢印に従います。

パイプライン

上の図には、ライフサイクル イベントの概念がありません。 この概念は、Web フォーム要求 ASP.NET 処理する方法の基礎です。 このシステムを使用すると、発生しているプロセスを簡単に推論でき、いつでもミドルウェアを挿入できます。 ミドルウェアは、要求パイプラインに追加された順序で実行されます。 構成ファイルの代わりにコードにも追加されます。通常は Startup.cs

日本刀

カタナに精通している読者は、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 コア ID の ASP.NET

この一覧は完全ではありませんが、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 ミドルウェアを記述する」を参照してください。