Asp.net-Mvc
動作過濾器執行順序
我創建了兩個實現
AuthorizeAttribute.一個是全域使用的,我在 Global.asax.cs 上設置:
filters.Add(new FirstAuthorizeAttribute() { Order = 0 });另一個被呼叫
SecondAuthorizeAttribute,它只在一些動作方法中使用,我將它用作我想要的方法中的屬性。[HttpGet] [SecondAuthorize] public ActionResult LogOut() { FormsAuthentication.SignOut(); Session.Clear(); Session.Abandon(); return Redirect(Url.Content("~/")); }問題是
SecondAuthorizeAttribute總是先執行FirstAuthorizeAttribute,我需要先執行這個。訂單沒有幫助,我該怎麼辦?
這是一個很長的鏡頭,但是您是否嘗試過為 FirstAuthorizeAttribute 使用 Global 和 First 值?
<http://msdn.microsoft.com/en-us/library/system.web.mvc.filterscope(v=vs.98).aspx>
<http://blog.rajsoftware.com/post/2011/05/14/MVC3-Filter-Ordering.aspx>
@HectorCorrea 的答案中的連結目前已失效,這是從目前 Google 記憶體中檢索和匯總的內容(以防萬一):
過濾器按以下順序執行:
- 授權過濾器
- 動作過濾器
- 響應/結果過濾器
- 異常過濾器
在每個過濾器中,您可以指定 Order 屬性。(所有過濾器都派生自抽像類FilterAttribute,並且該類具有Order 屬性)。此屬性將確保過濾器以特定順序執行。
例如:
[AuthorizationFilterA(Order=2)] [AuthorizationFilterB(Order=1)] public ActionResult Index() { return View(); }還有
FilterScope,預設情況下,當順序相同(或未指定)時,具有最低範圍的過濾器首先執行:namespace System.Web.Mvc { public enum FilterScope { First = 0, Global = 10, Controller = 20, Action = 30, Last = 100, } }如果未指定順序,則順序值為 -1(第一個,而不是最後一個)。
控制器本身可以是過濾器,並將按順序執行
Int32.MinValue