asp.netコアミドルウェアについて読んだ後、同じ目標を達成しているように見えるので、いつフィルターを使用すべきか、いつミドルウェアを使用すべきか混乱しています。フィトラーの代わりにミドルウェアを使用する必要があるのはいつですか?
回答:
これに関するビデオがチャネル9にあります: ASP.NET Monsters#91:ミドルウェアvs.フィルター。ビデオを要約すると:
リクエストの実行が開始され、ミドルウェアと別のミドルウェアがあります。これは「人形の中のロシアの人形」のように考えられ、最終的にルーティングミドルウェアが起動し、リクエストがMVCパイプラインに入ります。
したがって、MVCのコンテキストを必要としない場合(ヘッダーへの応答や事前ルーティングメカニズムなど、フローと実行について懸念している場合など)、ミドルウェアを使用します。
ただし、MVCのコンテキストが必要で、アクションに対して操作する場合は、フィルターを使用します。
の実行はmiddleware
、MVCコンテキストがパイプラインで使用可能になる前に発生します。つまり、たとえばActionFilterの場合middleware
、ActionExecutingContext
またはにアクセスできませんActionExecutedContext
。アクセスできるのは、ですHttpContext
。これにより、応答だけでなく要求に対してもアクションを実行できます。モデルのバインドはまだ行われていないため、ミドルウェアの使用は、検証関数の実行や値の変更には適していません。Middleware
また、呼び出されるコントローラーまたはアクションに関係なく、すべての要求で実行されます。
一方、filters
スタートアップでフィルターをグローバルに登録しない限り、指定されたアクションとコントローラーでのみ実行されます。コンテキストへのフルアクセスがあるため、コントローラーとアクション自体にもアクセスできます。
ソースと例:dotnetcultist.com