Asp.net-Mvc

ActionFilter 的 order 屬性,從最低到最高,反之亦然?

  • February 12, 2019

我定義了兩個 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 進行比較。我錯過了什麼嗎?

後進先出順序

這是我一直在尋找的答案。OnActionExecuted 的順序與 OnActionExecuting 的順序相反…

這完全取決於每個過濾器實現的內容。

如果 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 方法。”

引用自:https://stackoverflow.com/questions/6152420