ASP.Net MVC ActionFilterAttributes订购Global vs Local

时间:2014-04-04 10:56:30

标签: asp.net-mvc

我想知道是否有执行ActionFilterAttribute属性的命令。我猜测本地的(在控制器的动作上定义的ActionFilterAttribute)正按照它们在Action上定义的顺序执行。

然而,无论是否在本地过滤器之前应用全局过滤器,反之亦然?此外,如果存在已定义的订单而不仅仅是仲裁,那么它在Mvc版本中是否一致?

提前致谢 汤姆

2 个答案:

答案 0 :(得分:2)

有几个因素决定了docs

运行操作过滤器属性的顺序
  

在每种过滤器类型中,Order值指定运行顺序。在每个过滤器类型和顺序中,Scope枚举值指定过滤器的顺序。此枚举定义以下过滤器范围值(按其运行顺序):

     
      
  1. 第一
  2.   
  3. 全局
  4.   
  5. 控制器
  6.   
  7. 动作
  8.   
  9. 最后
  10.   

另外,你的假设

  

我猜测本地的(在控制器的Action上定义的ActionFilterAttribute)按照它们在Action上定义的顺序执行

不正确,没有定义订单/范围的过滤器的定义顺序

  

具有相同类型,顺序和范围的过滤器的执行顺序未定义。

如果您关心它们的执行顺序,那么您应该使用Order属性指定它。

答案 1 :(得分:1)

过滤器的顺序是这样的:

  1. Global OnActionExecuting
  2. 本地控制器范围过滤器OnActionExecuting
  3. 本地操作范围过滤器OnActionExecuting
  4. 行动调用
  5. 本地操作范围过滤器OnActionExecuted
  6. 本地控制器范围过滤器OnActionExecuted
  7. Global OnActionExecuted