【发布时间】:2015-08-17 11:56:18
【问题描述】:
根据这个documentation for ASP.NET Filters过滤器按以下顺序运行:
- 授权过滤器
- 动作过滤器
- 响应过滤器
- 异常过滤器
在每个过滤器类型中都有一个过滤器Order指定运行顺序。
到目前为止是有道理的......但后来它变得很奇怪。
在每个过滤器类型和顺序中还有另一种排序方法,它表示为以下值的枚举:
public enum FilterScope
{
First = 0,
Global = 10,
Controller = 20,
Action = 30,
Last = 100,
}
全局、控制器和动作在动作过滤器的运行顺序中的作用是什么?
例如:
如果我有两个动作过滤器,它们的运行顺序分别为 1 和控制器和动作的 FilterScope。
Controller 和Action 除了在另一个之前订购,还有什么作用?
更离奇的事
According to this FilterScope 为过滤器提供第三级排序。 Controller、Global 或 Action 如何成为一个过滤器的命令,它绝不限于仅用于 Controller、Action 并且不一定适用于全局?它不是对订单的描述。
另外,如果它确实提供了第三级过滤,为什么它仅限于 5 个选项?
【问题讨论】:
-
我认为
FilterScope定义了您使用过滤器的位置:全局、整个控制器或某些操作。所以第一个将执行的将是一个全局过滤器,然后是控制器,然后是动作 -
对您有帮助吗:msdn.microsoft.com/en-us/library/… ?
-
@VsevolodGoloviznin 我也这么认为,但这并不能解释为什么要为每个
filter type and order指定它,它肯定会超越这些。所以它将是:过滤器范围、过滤器类型、过滤器顺序。不是反过来吗? -
@Serv 遗憾的是,该页面仅包含与我在问题中发布的文档相同的信息:(
-
FilterScope 似乎只是用于在多个过滤器中使用时设置过滤器的顺序,但对我来说这就是
Order的用途。为什么我要将过滤器设置为Order = 0(第一)和FilterScope = Last。这没有任何意义。它不限制过滤器的使用,it just sets the ordering
标签: c# asp.net-mvc action-filter