gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 操作过滤器 : Setting the filterContext. 过滤器中的结果阻止其他过滤器被执行?

转载 作者:行者123 更新时间:2023-12-02 00:37:21 25 4
gpt4 key购买 nike

我目前有 2 个过滤器,Auth 和 Redirect,它们执行以下操作:Filter Auth,实现 IAuthorizationFilter 和 ActionFilter,检查用户登录和授权,如果失败则将 filterContext.Result 设置为 403 的 HttpStatusCodeResult(禁止).实现 IActionFilter 和 ActionFilter 的 Filter Redirect 检查结果,如果是 403,则重定向到登录页面。

我将它们应用于如下操作:

[Auth(Order=0)]
[Redirect(Order=1)]

但是,Auth 被执行但 Redirect 永远不会被执行(不是它提供的 4 个可覆盖方法之一)。如果我删除 Auth Redirect 会被执行,但如果我将 Auth 包含为第一个过滤器,则不会执行 Redirect。我想设置过滤器上下文的 Result 属性会阻止任何其他过滤器被执行,但我无法理解为什么会这样。仅供引用,我使用的是 ASP.NET MVC 3 beta,但这不会改变任何内容。

更新:将 Auth 的过滤器类型更改为 IActionFilter 而不是 IAuthorizationFilter 会导致 Redirect 中的 OnResultExecuting 和 OnResultExecuted 触发,但更改那里的 Response 对浏览器的最终响应没有任何影响。

最佳答案

我最终通过将 Redirect 设置为 IResultFilter 并在 OnResultExecuting 中编写以下内容来修复它:

filterContext.HttpContext.Response.Redirect(url);

关于asp.net-mvc - ASP.NET MVC 操作过滤器 : Setting the filterContext. 过滤器中的结果阻止其他过滤器被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056513/

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