我添加了一些全局 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
方法文档确实说明它添加一个项目到集合的末尾)
最佳答案
基于WebApi和Linq源码,过滤器执行顺序为:
- 身份验证过滤器
- 授权过滤器
- ActionFilters,基于范围
- 全局
- 控制者
- 行动
- 异常过滤器
相同类型和范围的过滤器将按照它们添加到 FilterCollection 的相同顺序执行。
例子:
config.Filters.Add(new ActionFilterAttribute1());
config.Filters.Add(new AuthenticationFilter());
config.Filters.Add(new ActionFilterAttribute2());
执行顺序将是
- 身份验证过滤器
- ActionFilterAttribute1
- ActionFilterAttribute2
关于c# - 全局 ASP.NET Web API 过滤器是否总是按顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828051/