过滤范围是什么,为什么要使用怪异的名称?

问题描述 投票:7回答:3

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

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

每种过滤器类型中都有一个过滤器Order,用于指定运行顺序。

到目前为止已经感觉到了...但是后来变得奇怪了。

还有另一种排序方法[[在每种过滤器类型和顺序内],这表示为以下值的枚举:public enum FilterScope { First = 0, Global = 10, Controller = 20, Action = 30, Last = 100, }

动作过滤器的运行顺序中全局,控制器和动作具有什么方位?

例如:

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

除了先订购一个外,ControllerAction对什么有影响?

进一步的奇异之处

According to thisFilterScope为过滤器提供第三级排序。 ControllerGlobalAction是如何不受限制地仅在ControllerAction上使用且不一定全局应用的过滤器的顺序?它不是订单的描述。

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

根据本文档的ASP.NET筛选器,筛选器按以下顺序运行:授权筛选器,操作筛选器,响应筛选器,异常筛选器在每种筛选器类型中都有一个...

c# asp.net-mvc action-filter
3个回答
3
投票
Filter对象(实际上具有Filter属性的对象)是根据使用情况构造的-将过滤器添加到全局应用程序过滤器时,Scope对象的构造是ScopeFilter ]。类似地,当从控制器和操作中收集过滤器属性时,分别使用ScopeGlobal的作用域构造Filter对象。

我不确定如何实际创建ControllerActionFilterScope。>

这些规则是为了说明如果您在全局级别和操作级别使用相同的First值声明了过滤器,将如何应用平局决胜制-比声明的过滤器更值得关注在与您手动确保每个过滤器使用唯一的Last相同的级别上(如果您关心订购的话)。


2
投票
嗯,我真的不明白您在这里发现的奇怪之处到底是什么。

Authorization,Action,Response和Exception过滤器是您可以用来运行过滤器逻辑的4个接口,分别是OrderOrderIAuthorizationFilterIAuthorizationFilter接口。


0
投票
根据我的理解,

过滤器顺序

© www.soinside.com 2019 - 2024. All rights reserved.