我创建了两个实现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
之前执行,我需要先执行此操作。订单没有帮助,我怎么能这样做?
答案 0 :(得分:19)
目前,@ 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
答案 1 :(得分:12)
这是一个很长的镜头,但您是否尝试过使用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
答案 2 :(得分:3)
订单在global.asax.cs文件中不起作用。 如果需求是订单,则转到Controller或Action Method并给出。 例如: -
[secondAttribute(order = 1)] [firstAttribute(顺序= 2)]
的HomeController:控制器
或
公共ActionResult索引()