全局ASP.NET Web API过滤器是否始终按顺序执行?

时间:2015-11-20 13:35:24

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

我添加了许多全局ASP.NET Web API过滤器(其中config是我的System.Web.Http.HttpConfiguration

config.Filters.Add(new SomeFilter());
config.Filters.Add(new AnotherFilter());
config.Filters.Add(new YetAnotherField());

这些过滤器是否始终按上述顺序执行? 我从来没有经历过他们在测试时没有按顺序执行但是想确定原因我已经注意到我们的日志中可能会发生一些异常,如果它们不按顺序排列(可能是另一个原因)。

HttpFilterCollection文档没有明确说明它保留了订单(尽管Add方法文档确实声明它将一个项目添加到集合的末尾)

1 个答案:

答案 0 :(得分:2)

基于WebApi和Linq源,过滤器执行顺序为:

  1. AuthenticationFilters
  2. AuthorizationFilters
  3. ActionFilters,基于范围
    • 全局
    • 控制器
    • 动作
  4. ExceptionFilters
  5. 相同类型和范围的过滤器将按照添加到FilterCollection的相同顺序执行。

    示例:

    config.Filters.Add(new ActionFilterAttribute1());
    config.Filters.Add(new AuthenticationFilter());
    config.Filters.Add(new ActionFilterAttribute2());
    

    执行顺序将是

    1. AuthenticationFilter
    2. ActionFilterAttribute1
    3. ActionFilterAttribute2