gpt4 book ai didi

c# - 使用 ValidateAntiForgeryToken 自定义授权过滤器订单执行

转载 作者:太空狗 更新时间:2023-10-29 23:08:07 26 4
gpt4 key购买 nike

我在一个方法上使用了几个授权过滤器。

[SessionState(SessionStateBehavior.Required)]
public class AuthenticationFilterAttribute : AuthorizeAttribute {}

[HttpPost]
[AuthenticationFilter]
[ValidateAntiForgeryToken]
public void SaveProgress(string data) {}

它们都是授权过滤器,所以我希望 AuthenicationFilter 在 ValidateAntiForgeryToken 过滤器之前运行。但是 ValidateAntiForgeryToken 在身份验证过滤器之前运行。

我知道这可以通过 Order 属性来解决。但我想知道这种行为的原因,并且我想确保它按该顺序执行(在相应的过滤器类型中 - 授权,操作......等等)。

最佳答案

过滤器执行顺序由它们的类型定义,它们的 Order最后是他们的 Scopes .

来自 msdn :

过滤顺序

过滤器按以下顺序运行:

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

例如,授权过滤器首先运行,异常过滤器最后运行。在每个过滤器类型中,Order 值指定运行顺序。在每个筛选器类型和顺序中,Scope 枚举值指定筛选器的顺序。此枚举定义了以下过滤器范围值(按照它们运行的​​顺序):

  1. 首先
  2. 全局
  3. 控制者
  4. Action 最后

例如,Order 属性设置为零且过滤器范围设置为 First 的 OnActionExecuting(ActionExecutingContext) 过滤器在 Order 属性设置为零且过滤器范围设置为 Action 的操作过滤器之前运行。由于异常筛选器以相反的顺序运行,因此将 Order 属性设置为零且筛选范围设置为 First 的异常筛选器在将 Order 属性设置为零且筛选范围设置为 Action 的操作筛选器之后运行。

最后:

The execution order of filters that have the same type, order, and scope is undefined.

你的 ValidateAntiForgeryTokenAuthorize过滤器也具有相同的类型、顺序和范围(均未定义),因此执行顺序将是未定义的。从那时起,您唯一的选择就是为两者定义一个 Order 属性。

请注意,FilterScope 属性未显示在我的 Intellisense 中,但在键入它后,它终于出现了。

关于c# - 使用 ValidateAntiForgeryToken 自定义授权过滤器订单执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com