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

时间:2011-07-03 08:30:50

标签: asp.net-mvc asp.net-mvc-3 filter action-filter

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

[HttpPost]
[Authorize]
public ActionResult mymethod(){}

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

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

2 个答案:

答案 0 :(得分:71)

过滤器按以下顺序运行:

  1. 授权过滤器
  2. 操作过滤器
  3. 响应过滤器
  4. 例外过滤器
  5. 例如,授权过滤器首先运行,异常过滤器最后运行。在每个过滤器类型中,Order值指定运行顺序。在每个过滤器类型和顺序中,Scope枚举值指定过滤器的顺序。此枚举定义以下过滤器范围值(按其运行顺序):

    1. 第一
    2. 全局
    3. 控制器
    4. 动作
    5. 最后
    6. 摘自MSDN

答案 1 :(得分:21)

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

[MyCustomContextFilter(Order=1)]

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

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