c# - 全局 ASP.NET Web API 过滤器是否总是按顺序执行?

标签 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 方法文档确实说明它添加一个项目到集合的末尾)

最佳答案

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

  1. 身份验证过滤器
  2. 授权过滤器
  3. ActionFilters,基于范围
    • 全局
    • 控制者
    • 行动
  4. 异常过滤器

相同类型和范围的过滤器将按照它们添加到 FilterCollection 的相同顺序执行。

例子:

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

执行顺序将是

  1. 身份验证过滤器
  2. ActionFilterAttribute1
  3. ActionFilterAttribute2

关于c# - 全局 ASP.NET Web API 过滤器是否总是按顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33828051/

相关文章:

c# - 根据另一个控件的属性绑定(bind)列表中的数据

c# - 通过机器人框架的电报聊天键盘

ios - 使用通知中心和 .NET Web API 作为后端的推送通知

c# - WebApi PushStreamContent 错误处理

asp.net-web-api - 在同一个解决方案中测试 WebAPI 和前端?

azure - 使用代理下载私有(private) Blob 图像?

c# - 选择 .Net 技术对单个 USB 设备进行多次访问

c# - 安装 2 个独立的 NuGet 包,具有​​一个依赖但版本不同

c# - 控制文档中未给出串行命令的电机

asp.net-mvc-4 - 通过 Ajax 或 MVC Controller 设置强类型 View ?