更改ASP.Net MVC中的过滤器的默认顺序

时间:2014-10-02 00:01:15

标签: .net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5

是否有强制自定义IActionFilter在自定义IAuthenticationFilter之前执行?

我熟悉有关过滤器排序的以下文档:

http://msdn.microsoft.com/en-us/library/gg416513%28v=vs.98%29.aspx

但我想知道我是否可以改变它。我已经实现了如下所示的自定义IFilterProvider,但是无法在UnitOfWork(IActionFilter)之后执行我的授权过滤器(IAuthorizationFilter)。

public class CustomFilterProvider : IFilterProvider
{
    public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
    {
        return new List<Filter>
        {
            new Filter(new UnitOfWork(), FilterScope.Global, 0),
            new Filter(new CustomAuthorization(), FilterScope.Global, 30),
        };
    }
}

1 个答案:

答案 0 :(得分:0)

好吧,你可以做的最好就是在Filter类型中订购过滤器,除非你想覆盖ControllerActionInvoker.InvokeAction方法并完全改变这些东西的默认MVC管道。

我发现过滤器使用起来很不愉快。希望它们在操作之上被实现为装饰器,这样我们就可以更容易地围绕它们包装功能。