多个ActionFilterAttribute执行顺序有保证吗?

时间:2014-07-18 14:59:16

标签: c# .net asp.net-web-api action-filter

我只是研究了ActionFilters,它们非常有用。现在,我尝试了多个装饰方法,以便分离逻辑。我认为这会很有用。

所以这是一个示例方法

[Common.PortalSecurity.Login]
[Common.PortalSecurity.UserRole]
public HttpResponseMessage GetAll(string sessionToken)
{
    return new HttpResponseMessage();
}

这种方法很好,但Login必须在UserRole之前执行。

100%执行顺序是否会在每次请求时得到尊重?

blog post似乎表明它应该有用。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我上面提出的解决方案是这样的:

您的自定义属性必须继承:

public class LoginAttribute : ActionFilterWithOrderAttribute
{

}

public class UserRoleAttribute : ActionFilterWithOrderAttribute
{

}

想要使用它的方法应该被装饰为:

[Common.PortalSecurity.Login(Order=1)]
[Common.PortalSecurity.UserRole(Order=2)]  
public HttpResponseMessage GetAll(string sessionToken)
{
    return new HttpResponseMessage();
}

答案 1 :(得分:0)

MVC5 中,您继承自 ActionFilter ,并在自定义属性中指明顺序(使用ActionFilter的Order 属性),如下所示:

[Common.PortalSecurity.Login(Order=1)]
[Common.PortalSecurity.UserRole(Order=2)]  
public HttpResponseMessage GetAll(string sessionToken)
{
    return new HttpResponseMessage();
}

您可以在以下网址获取更多信息:https://msdn.microsoft.com/en-us/library/system.web.mvc.filterattribute.order(v=vs.118).aspx