gpt4 book ai didi

asp.net-mvc - MVC 授权属性 + HttpUnauthorizedResult + FormsAuthentication

转载 作者:行者123 更新时间:2023-12-04 10:58:52 25 4
gpt4 key购买 nike

浏览 CodePlex 上的 MVC 部分后,我注意到 MVC 中的 [Authorize] 属性在授权失败时返回 HttpUnauthorizedResult() (codeplex AuthorizeAttribute class)。

CodePlex 的 HttpUnauthorizedResult() 的源代码是代码(我不允许输入另一个 URL,因为我的代表不够高,但将上面 URL 上的数字替换为 22929#266476):

// 401 is the HTTP status code for unauthorized access - setting this
// will cause the active authentication module to execute its default
// unauthorized handler
context.HttpContext.Response.StatusCode = 401;

特别是,注释描述了身份验证模块的默认未授权处理程序。

我似乎找不到有关此默认未经授权处理程序的任何信息。特别是,我没有使用 FormsAuthentication,当授权失败时,我得到一个丑陋的 IIS 401 错误页面。

有谁知道这个默认的未经授权的处理程序,特别是 FormsAuthentication 如何将自己 Hook 以覆盖它?

我正在为我的足球队编写一个非常简单的应用程序,他们确认或否认他们是否可以参加特定的比赛。如果我在 web.config 中启用 FormsAuthentication,则重定向有效,但我没有使用 FormsAuthentication,我想知道是否有解决方法。

最佳答案

如果您有 Reflector,请查看 System.Web.Security.FormsAuthenticationModule.Init()。此方法 Hook Application_EndRequest 并调用 OnLeave()。 OnLeave() 方法检查响应代码是否为 HTTP 401。如果是,则模块执行重定向,而不是将 401 冒泡到客户端。 (此逻辑是注释所指的“默认未经授权的处理程序”。)在您的特定情况下,ASP.NET 让 401 冒泡到客户端,但 IIS 正在拦截它并显示一个丑陋的错误页面。

您可以在 Global.asax 中执行非常类似的操作。制作一个方法 Application_EndRequest;此方法将在您的应用程序服务的每个请求结束时调用。从这里,你可以做任何你想做的事。如果您想检查响应是否为 401 并将它们重定向到不同的页面,您可以从此处执行此操作。

关于asp.net-mvc - MVC 授权属性 + HttpUnauthorizedResult + FormsAuthentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2140601/

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