まず、ミドルウェアは何ですか
ミドルウェアは、処理要求と応答パイプラインソフトウェアアプリケーションに集約されます。 各コンポーネント:
- あなたは、要求がパイプライン内の次のコンポーネントに渡されるべきかどうかを選択することができます。
- および関連事業は、次の呼び出し要求パイプラインの組み立て前の動作後に行うことができます。
第二に、パイプラインを作成するためのミドルウェアの使用IApplicationBuilder
ASP.NETコア要求パイプラインと要求一連の委託は、要求を順次一つずつデリゲートが呼び出され、図組成に示される配列は、(黒い矢印の順序で実行):
各代表は次の手数料関連の操作の前と後に行ってもよいです。また、次のデリゲート信頼チェーン(私たちは短絡を呼び出す)に要求を委任しないことを決定してもよいです。
それは不要な作業を避けるため、ショート回路は、通常、必要とされます。
たとえば:静的ファイルのミドルウェアは、要求と短いダクト静的ファイルの残りの部分を返します。
例外処理要求が、後段で発生し、彼らが要求パイプラインの例外をキャプチャすることができますのでことを、早い段階パイプラインで呼び出す必要があります。
最も簡単なASP.NET Coreアプリケーションのすべての要求のデリゲートを処理するための要求の単一のセット。これは、この場合、実際の要求パイプラインが含まれていません。代わりに、単一無名関数は、各HTTPリクエストに応じて呼び出されます。
使用してMicrosoft.AspNetCore.Builderを。 使用してMicrosoft.AspNetCore.Hostingを。 使用してMicrosoft.AspNetCore.Httpを。 パブリック クラススタートアップ { 公共の 無効設定(IApplicationBuilderアプリ) { app.Run(非同期コンテキスト=> { のawait context.Response.WriteAsync(" こんにちは、世界!" ); }); } }
第二に、順序
二、使用、実行、および地図
三、使用、ファイル名を指定して実行と地図
第四に、組み込みのミドルウェア
第五に、カスタムミドルウェア
典型的には、ミドルウェアは、クラスにカプセル化され、ひいては方法を開示しています。以下のミドルウェアは、それが現在のリクエスト培養クエリ文字列に応じて提供されます。
パブリック クラススタートアップ { 公共の 無効設定(IApplicationBuilderアプリ) { app.Use((コンテキストは、次の) => { VAR cultureQuery = context.Request.Query [ " 文化" ]; もし!(文字列.IsNullOrWhiteSpace(cultureQuery)) { VAR培養= 新規のCultureInfo(cultureQuery); CultureInfo.CurrentCulture = 培養; CultureInfo.CurrentUICulture = 培養; } //デリゲートコール/ミドルウェアザ・パイプライン内の次の
//呼び出し側アプリケーション次デリゲートパイプ/中間
戻り、次の() }); app.run(非同期(コンテキスト)=> { のawait context.Response.WriteAsync( $ " {} CultureInfo.CurrentCulture.DisplayNameのこんにちは" ); }); } }
テストミドルウェアhttp://localhost:7997/?culture=no
。
次のコードは、ミドルウェア委譲クラスに移動されます。
使用してMicrosoft.AspNetCore.Httpを。 使用してSystem.Globalizationを。 使用してSystem.Threading.Tasksを。 名前空間の文化 { パブリック クラスRequestCultureMiddleware { プライベート 読み取り専用RequestDelegate _next。 公共RequestCultureMiddleware(RequestDelegate次) { _next = 次回。 } パブリックタスクを呼び出し(のHttpContextコンテキスト) { VAR cultureQuery = context.Request.Query [ " 培養" ]。 もし(!ストリング.IsNullOrWhiteSpace(cultureQuery)) { VARの文化= 新規のCultureInfo(cultureQuery)。 CultureInfo.CurrentCulture = 文化。 CultureInfo.CurrentUICulture = 文化。 } // パイプライン内の次のデリゲート/ミドルウェアコール リターン この._next(コンテキスト)。 } } }
拡張メソッドによってIApplicationBuilderは、ミドルウェアを開示し
使用してMicrosoft.AspNetCore.Builderを。 名前空間の文化 { パブリック 静的の クラスRequestCultureMiddlewareExtensions { 公共の 静的IApplicationBuilder UseRequestCulture( このIApplicationBuilderビルダー) { リターン builder.UseMiddleware <RequestCultureMiddleware> (); } } }
パブリック クラススタートアップ { 公共の 無効設定(IApplicationBuilderアプリ) { app.UseRequestCulture(); app.Run(非同期(コンテキスト)=> { のawait context.Response.WriteAsync( $ " こんにちは{CultureInfo.CurrentCulture.DisplayName} " ); }); } }
ミドルウェアコンポーネントは、制御依存コンストラクタ引数の反転により、注射の目的を達成することができます。 UseMiddleware<T>
また、直接、他のパラメータを受け入れることができます。
概要
本論文では、ASP.NETコア要求パイプラインだけでなく、私たちは延長要求パイプラインを構成するためのより便利な方法であることいくつかの助けを構築するプロセスを説明します。ASP.NETコアでは、少なくとも要求に応答するミドルウェアを持っている、と私たちのアプリケーションは、実際にミドルウェアの単なる集合体である、MVCはミドルウェアのひとつです。簡単に説明すると、ミドルウェアの処理コンポーネントは、各中間体は、従って、処理を終了することを選択する、または次の中間ダクトに渡さできるHTTP要求と応答、中間要求処理パイプラインの複数の構成であります直列に形成された要求パイプライン。一般的に、私たちに登録された各ミドルウェアは、すべてのリクエストとレスポンスが呼び出されますが、また、使用することができ Map
、 MapWhen
、UseWhen
ミドルウェアをフィルタリングするための、その他の拡張メソッドを。