什么是过滤器范围以及为什么奇怪的名称?

Luk*_*uke 7 c# asp.net-mvc action-filter

根据ASP.NET过滤器的此文档,过滤器按以下顺序运行:

  1. 授权过滤器
  2. 动作过滤器
  3. 响应过滤器
  4. 异常过滤器

每个过滤器类型中都有一个过滤器Order,它指定了运行顺序.

到目前为止有道理......然而它变得奇怪.

在每个过滤器类型和顺序中还有一种排序方法,它表示为以下值的枚举:

public enum FilterScope
{
    First = 0,
    Global = 10,
    Controller = 20,
    Action = 30,
    Last = 100,
}
Run Code Online (Sandbox Code Playgroud)

Global,Controller和Action在动作过滤器的运行顺序中有什么影响?

例如:

如果我有两个动作过滤器,它们的运行顺序分别为1和FilterScopeController和Action.

除了在另一个之前订购一个之外,什么轴承做什么ControllerAction做什么?

进一步的奇异

根据该FilterScope提供过滤器第三级排序.过滤器的顺序是什么Controller,Global或者Action一个顺序绝不仅限于a Controller,Action而不一定全局应用?它不是订单的描述.

此外,如果它确实提供了第三级过滤,为什么它仅限于5个选项?

Dam*_*ver 3

Filter对象,即实际具有属性的对象Scope,是根据用法构造的 - 当您将过滤器添加到全局应用程序过滤器时,会使用ofFilter构造对象。类似地,当从控制器和操作收集过滤器属性时,将分别使用和 的范围构造对象。ScopeGlobalFilterControllerAction

我不完全确定 aFilter与 a ScopeofFirstLast实际上是如何创建的。

这些规则指定为说明如果您在全局级别和操作级别使用相同的Order值声明了一个过滤器,则如何应用平局打破 - 这比在同一级别声明的过滤器更值得关注,其中您需要手动确保每个过滤器使用唯一的Order(如果您关心排序)。

  • 我认为默认值是“First”,因为它是“enum”中的第一个,这导致它等于“0” (2认同)