モジュール、ハンドラー、ミドルウェア
ヒント
このコンテンツは電子ブック、Azure の「ASP.NET Web Forms 開発者向け Blazor」からの抜粋です。これは .NET Docs から閲覧するか、オフラインで読める無料ダウンロードの PDF としても入手できます。
ASP.NET Core アプリは一連のミドルウェアに基づいて構築されます。 ミドルウェアは、要求と応答を処理するためにパイプラインに配置されるハンドラーです。 Web Forms アプリでは、HTTP ハンドラーとモジュールによって同様の問題が解決されます。 ASP.NET Core では、モジュール、ハンドラー、global.asax、およびアプリのライフ サイクルはミドルウェアに置き換えられます。 この章では、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 にも多くのミドルウェア コンポーネントが用意されています。 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 ミドルウェアを記述する」を参照してください。
.NET