2014-04-04 36 views
0

我想知道是否有执行ActionFilterAttribute属性的命令。我猜测本地的(在控制器的Action上定义的ActionFilterAttribute)按照它们在Action上定义的顺序执行。ASP.Net MVC ActionFilterAttributes排序Global VS Local

但是否有人会否在全局过滤器在本地过滤器之前应用,反之亦然?另外,如果有定义的顺序,而不仅仅是任意的,它是否与Mvc版本保持一致?

在此先感谢 汤姆

回答

1

有一对夫妇的该决定在行动过滤器属性的运行顺序的影响因素,从docs

在每个过滤器类型中,Order值指定运行顺序。在每个过滤器类型和顺序中,范围枚举值指定过滤器的顺序。该枚举定义了如下滤波器的范围值(按顺序在它们运行):

  1. 首先
  2. 全球
  3. 控制器
  4. 行动
  5. 最后

另外,你的假设

我猜的顺序执行本地的(在控制器的动作定义的ActionFilterAttribute)他们在行动

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

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

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

+0

谢谢你的快速反应。 –

1

的过滤器顺序是这样的:

  1. 全球OnActionExecuting
  2. 本地控制器范围过滤器OnActionExecuting
  3. 地方行动范围过滤器OnActionExecuting
  4. 行动invokation
  5. 本地行动范围过滤器OnActionExecuted
  6. 本地控制器范围过滤器OnActionExecuted
  7. 全球OnActionExecuted
+0

谢谢你的回答,这是我以后的事情 - 不过Andrew的答案更加完整,这就是为什么我将他的答案标记为选定的答案。 –

+0

只是重新阅读我的评论,并意识到我说安德鲁的答案,当我的意思是詹姆斯' –