在asp.net mvc中以什么顺序执行filter

在MVC中,我们可以使用不同的filter来修饰操作方法

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

HttpPost派生自MethodSelectorAttribute (可能间接), Authorize派生自ActionFilterAttribute

我的问题是:他们在MVC请求pipe道中执行的顺序? 我试图去searchMVC源代码,但没有find相关的代码位。

filter按以下顺序运行:

  1. 授权filter
  2. 行动filter
  3. 响应filter
  4. 例外filter

例如,授权filter首先运行,exceptionfilter最后运行。 在每个filtertypes中,Order值指定运行顺序。 在每个filtertypes和顺序中,范围枚举值指定filter的顺序。 该枚举定义了以下filter作用域值(按它们的运行顺序):

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

从MSDN提取

为了节省你一些时间,这是你如何设置顺序:

 [MyCustomContextFilter(Order=1)] 

该索引是基于0,所以你可以做0,1,2等…

应该注意的是,只是因为在基类上的filter不告诉MVC先把它应用:(。