首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC Authorize属性+ HttpUnauthorizedResult + FormsAuthentication

MVC Authorize属性+ HttpUnauthorizedResult + FormsAuthentication
EN

Stack Overflow用户
提问于 2010-01-27 00:04:58
回答 1查看 5K关注 0票数 7

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

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

代码语言:javascript
复制
// 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,当授权失败时,我会得到一个丑陋的IIS401错误页面。

有没有人知道这个默认的未授权处理程序,特别是FormsAuthentication是如何挂接自己来覆盖它的?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-27 01:46:13

如果你有反射器,看看System.Web.Security.FormsAuthenticationModule.Init().此方法挂钩Application_EndRequest并调用OnLeave()。OnLeave()方法检查响应代码是否为HTTP401。如果是,则模块执行重定向,而不是将401冒泡到客户端。(这个逻辑就是评论所说的“默认的未授权处理程序”。)在您的特定情况下,ASP.NET让401冒泡到客户端,但IIS将其拦截并显示一个丑陋的错误页面。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2140601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档