IIS返回302而不是401

时间:2014-05-05 22:27:47

标签: asp.net asp.net-mvc asp.net-mvc-4 iis custom-errors

大家好我在web.config中遇到CustomErrors问题,我试图显示错误401的自定义页面,但是当用户尝试访问控制器并且没有授权时。< / p>

在这种情况下,返回值为302,但必须为401,我尝试使用Global.asax中的Application_EndRequest()来更改Response.Status代码:

void Application_EndRequest(object sender, EventArgs e)
{
    if (Context.Response.StatusCode == 302)
    {
        Context.Response.Clear();
        Context.Response.StatusCode = 401;
    }
}

有了这个,返回的错误是401但是没有显示自定义错误的页面,只是IIS的默认消息

  

未经授权:由于凭据无效,访问被拒绝

如何让自定义错误显示401错误的正确页面?

3 个答案:

答案 0 :(得分:0)

https://stackoverflow.com/a/620559/686674

的stackoverflow中的另一个问题上查看MVC中的自定义错误解决方案

您想要覆盖Application_Error而不是Application_EndRequest。

答案 1 :(得分:0)

如果您使用的是表单身份验证,则401由ASP.NET内部处理,并在质询/响应机制中用于身份验证。使用身份验证时,指定登录页面,当用户未获得授权时,会将其重定向到该页面以进行登录。

未经授权的401和被禁止的403之间存在差异。

如果您使用的是Windows身份验证,摘要或基本版,那么您将获得401 Challenge弹出窗口。 ASP.NET拦截401以便您不会获得弹出窗口,而是可以处理表单中的身份验证错误。

答案 2 :(得分:0)

我找到了问题here

的解决方案

使用自定义授权属性重定向到&#34; AccessDenied&#34;页