12

2 つの ActionFilter を定義しました。

[DefaultResources(Order = 2)]
[RenderTemplate(Order = 1)]

そして驚いたことに、DefaultResources は RenderTemplate の前に実行されます。しかし、MSDN のドキュメントによると、その逆も同様に機能するはずです。

[Filter1(Order = 2)]
[Filter2(Order = 3)]
[Filter3(Order = 1)]
public void Index()
{
    View("Index");
}

この例では、アクション フィルターは Filter3、Filter1、Filter2 の順序で実行されます。

私は.NET 4を使用しています。メソッドOnActionExecutedで比較しています。何か不足していますか?

4

3 に答える 3

24

後入れ先出し

これが私が探していた答えです。OnActionExecuted の順序は OnActionExecuting の逆順です...

于 2011-05-30T12:23:07.563 に答える
1

それはすべて、各フィルターが実装するものに依存します。

DefaultResource が OnActionExecuting または OnActionExecuted を実装している場合、RenderTemplate が実装されていない場合は最初に起動します。

詳細については、次を参照してください。

http://www.gregshackles.com/2010/09/custom-ordering-of-action-filters-in-asp-net-mvc/

http://msdn.microsoft.com/en-us/library/dd381609.aspx

「ASP.NET MVC フレームワークは、アクション フィルター属性でマークされたアクション メソッドを呼び出す前に、アクション フィルターの OnActionExecuting メソッドを呼び出します。同様に、フレームワークは、アクション メソッドが終了した後に OnActionExecuted メソッドを呼び出します。」

于 2011-05-30T05:23:23.653 に答える
0

アクション フィルターとそのメソッドの実行順序を決定する要素の詳細については、ASP.NET MVC でのフィルター処理に関するページを参照してください。

OnResultExecutedフィルターが使用していると述べたについては、以下を参照してください。

OnActionExecuting(ActionExecutingContext)OnResultExecuting(ResultExecutingContext)およびOnAuthorization(AuthorizationContext)フィルターは順方向に実行されます。、OnActionExecuted(ActionExecutedContext)OnResultExecuting(ResultExecutingContext)およびOnException(ExceptionContext)フィルターは逆の順序で実行されます。

注文は実際には非常に複雑なので、詳細については記事を参照してください。

于 2013-11-29T05:55:21.007 に答える