c# - Filter Scope 的作用是什么?为什么会有奇怪的名字?

标签 c# asp.net-mvc action-filter

根据这个documentation for ASP.NET Filters过滤器按以下顺序运行:

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

在每个过滤器类型中都有一个过滤器 Order 指定运行顺序。

到目前为止是有道理的……但后来就变得奇怪了。

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

public enum FilterScope
{
    First = 0,
    Global = 10,
    Controller = 20,
    Action = 30,
    Last = 100,
}

Global、Controller 和 Action 在 Action 过滤器的运行顺序中有什么意义?

例如:

如果我有两个 Action Filter,它们的运行顺序都是 1,并且 FilterScope 分别是 Controller 和 Action。

除了在另一个之前排序之外,ControllerAction 对任何事物有什么影响?

更奇怪

According to this FilterScope 为过滤器提供第三级排序。 ControllerGlobalAction 是如何为过滤器排序的,它绝不会仅限于在 Controller< 上使用Action 并且不一定在全局范围内应用?它不是订单的描述。

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

最佳答案

Filter 对象,实际具有 Scope 的对象属性,是根据使用情况构建的 - 当您将过滤器添加到全局应用程序过滤器时,一个 Filter对象是用 Scope 构造的的 Global .同样,当从 Controller 和操作收集过滤器属性时,Filter对象是使用 Controller 的范围构造的和 Action , 分别。

我不完全确定 FilterScopeFirstLast实际上被创建了。

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

关于c# - Filter Scope 的作用是什么?为什么会有奇怪的名字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32049747/

相关文章:

c# - 从 Controller 动态更改 css

asp.net-mvc - 在 asp.net mvc 中组织真实世界的应用程序代码有点迷茫

asp.net-mvc - 如何在 MVC 5 Razor 中设置日期格式

c# - MVC中的属性和过滤器有什么区别

c# - 从 OnActionExecutionAsync 返回而不在 asp.net 核心中执行操作

c# - Action 过滤器未被调用 WebAPI/.net Core

c# - 将参数传递给 EXE 程序集

c# - 如何获取 Queryable.Join 的 MethodInfo

c# - MDI 子项在最大化时显示图标

c# - 为什么将单个元素与 IEnumerable 进行比较不是编译错误