web-dev-qa-db-ja.com

asp.net mvcで実行されるフィルターの順序

MVCでは、次のようなさまざまなフィルターでアクションメソッドを装飾できます。

[HttpPost]
[Authorize]
public ActionResult mymethod(){}

HttpPostは(おそらく間接的に)MethodSelectorAttributeから派生し、Authorize属性はActionFilterAttributeを継承します。

私の質問は、MVCリクエストパイプラインでどの順序で実行されるのかということです。 MVCソースコードを検索しようとしましたが、関連するコードビットが見つかりませんでした。

52

フィルタは次の順序で実行されます。

  1. 認証フィルター
  2. アクションフィルター
  3. 応答フィルター
  4. 例外フィルター

たとえば、許可フィルターが最初に実行され、例外フィルターが最後に実行されます。各フィルタータイプ内で、Order値は実行順序を指定します。各フィルターの種類と順序内で、Scope列挙値はフィルターの順序を指定します。この列挙は、次のフィルタースコープ値を(実行する順序で)定義します。

  1. 最初
  2. グローバル
  3. コントローラ
  4. アクション
  5. 最終

[〜#〜] msdn [〜#〜] から抽出

74
Eranga

時間を節約するために、これが順序の設定方法です。

[MyCustomContextFilter(Order=1)]

インデックスは0ベースなので、0、1、2などを実行できます。

フィルタが基本クラスにあるからといって、MVCに最初に適用するように指示しないことに注意してください:(。

22
ProVega