ヒント
このコンテンツは電子ブック、Azure の「ASP.NET Web Forms 開発者向け Blazor」からの抜粋です。これは .NET Docs から閲覧するか、オフラインで読める無料ダウンロードの PDF としても入手できます。
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 ミドルウェアを記述する」を参照してください。
.NET