在asp.net mvc中执行过滤器的顺序是什么

Muh*_*hid 53 asp.net-mvc filter action-filter asp.net-mvc-3

在MVC中,我们可以使用不同的过滤器来装饰动作方法

[HttpPost]
[Authorize]
public ActionResult mymethod(){}
Run Code Online (Sandbox Code Playgroud)

HttpPost派生自MethodSelectorAttribute(可能是间接的)Authorize属性继承自ActionFilterAttribute.

我的问题是:它们在MVC请求管道中执行的顺序是什么?我试图在MVC源代码中搜索,但未能找到相关的代码位.

Era*_*nga 74

过滤器按以下顺序运行:

  1. 授权过滤器
  2. 动作过滤器
  3. 响应过滤器
  4. 异常过滤器

例如,授权过滤器首先运行,异常过滤器最后运行.在每个过滤器类型中,Order值指定运行顺序.在每个过滤器类型和顺序中,Scope枚举值指定过滤器的顺序.此枚举定义以下过滤器作用域值(按其运行顺序):

  1. 第一
  2. 全球
  3. 调节器
  4. 行动
  5. 持续

MSDN中提取

  • 是的,如果有多个候选人,则用于选择行动方法.所以它是一个标记属性.它在执行过滤器之前使用 (2认同)
  • 请访问http://zahidadeel.blogspot.com/2011/07/ajaxonly-attribute-actionfilter-vs.html了解更多详情 (2认同)

Pro*_*ega 22

为了节省您的时间,您可以按照以下方式设置订单:

[MyCustomContextFilter(Order=1)]
Run Code Online (Sandbox Code Playgroud)

索引是0基础,所以你可以做0,1,2等...

应该注意的是,仅仅因为过滤器在基类上并不能告诉MVC首先应用它:(.

  • 此外,没有指定订单的过滤器也会在带有订单的过 这适用于过滤器类型上下文(授权,操作等). (2认同)