Asp.net 获取空白页而不是401错误页

Asp.net 获取空白页而不是401错误页,asp.net,iis,iis-6,Asp.net,Iis,Iis 6,我在IIS6上部署了一个带有Windows身份验证的ASP.NET MVC3应用程序。当经过身份验证的用户单击他们无权查看的链接时,系统会提示他们按预期输入用户名和密码(在浏览器对话框中,而不是页面中) 然而,在三次单击“取消”或输入无效凭据后,我看到的不是401未经授权的页面,而是一个空白的白色页面 查看Fiddler,单击“取消”后有三个请求/响应。以下是回复摘要和标题: ASP.NET访问被拒绝消息(401.2) HTTP/1.1 401未经授权 日期:2012年7月20日星期五14:34

我在IIS6上部署了一个带有Windows身份验证的ASP.NET MVC3应用程序。当经过身份验证的用户单击他们无权查看的链接时,系统会提示他们按预期输入用户名和密码(在浏览器对话框中,而不是页面中)

然而,在三次单击“取消”或输入无效凭据后,我看到的不是401未经授权的页面,而是一个空白的白色页面

查看Fiddler,单击“取消”后有三个请求/响应。以下是回复摘要和标题:

  • ASP.NET访问被拒绝消息(401.2)

    HTTP/1.1 401未经授权 日期:2012年7月20日星期五14:34:21 GMT 服务器:Microsoft IIS/6.0 WWW:协商 WWW:NTLM X-Powered-By:ASP.NET X-AspNet-Version:4.0.30319 缓存控制:专用 内容类型:text/html;字符集=utf-8 内容长度:1701 代理支持:基于会话的身份验证

  • IIS您无权查看此页面(401.1)

    HTTP/1.1 401未经授权 内容长度:1539 内容类型:text/html 服务器:Microsoft IIS/6.0 WWW-Authenticate:NTLM-tlrmtvntuaacaaadamadgaaaf。。。(为简洁起见省略) X-Powered-By:ASP.NET 日期:2012年7月20日星期五14:34:21 GMT 代理支持:基于会话的身份验证

  • 空响应

    HTTP/1.1 401未经授权 日期:2012年7月20日星期五14:34:21 GMT 服务器:Microsoft IIS/6.0 WWW:协商 WWW:NTLM X-Powered-By:ASP.NET X-AspNet-Version:4.0.30319 X-AspNetMvc-Version:3.0 缓存控制:专用 内容长度:0 代理支持:基于会话的身份验证

  • 如何使其显示401错误页面?

    更新1:

    这是我的web.config错误部分

    <customErrors mode="RemoteOnly" defaultRedirect="~/Error" />
    
    
    
    我也在用

    我怀疑IIS正在返回空白页面而不是ASP.NET,但我不知道如何证明这一点。 更新2:


    这很有趣。如果我刷新空白页面,我会看到ASP.NET Access是被拒绝的消息。

    < P>您应该尝试在<强> Web.CONFIG文件中设置一个规则,以这种方式将用户重定向到未授权的页面。
     <System.Web>
       //map all the erros presented in the application to the error.aspx webpage
       <customErrors mode="RemoteOnly" defaultRedirect ="~/error.aspx">
       //redirect the user to a Error401.pasx Page after the server get an 401 Error 
       <error statusCode="401" redirect="Error401.aspx" />
      </customErrors>
     <System.Web>
    
    
    //将应用程序中显示的所有错误映射到error.aspx网页
    //在服务器收到401错误后,将用户重定向到Error401.pasx页面
    

    我希望这对你有用。

    我是在研究了@Andrewagner建议的401重定向后提出这项工作的。这是基于。我实现了
    AuthorizeAttribute
    并重写了
    HandleUnauthorizedRequest()


    据我所知,这将在MVC管道中捕获未经授权的请求,然后再发送到IIS。这使我有机会重定向到一个用户友好的未授权页面。

    只是一个猜测,但它是否试图将它们重定向回用户名和密码页面,因为它们仍然未授权?因为它已经认为它处理了用户,所以视图没有显示任何内容?它不是登录页面,而是浏览器登录对话框。啊,很抱歉,没有看到这一部分。第三次尝试后,您是否将他们重定向到401页面?如果没有,则您将保持在同一页面上,但不会显示任何内容,因为服务器不发送任何内容。@AndrewHagner授权失败后,我将如何重定向它们?好的,对于我所做的任何项目,我们都使用自定义的“拒绝访问”页面,只需执行标准的mvc直接访问即可。如果你真的反对这样做,那么你必须找到一种方法来重定向到401页本身,我甚至不确定你能做到,因为在错误真正发生之前,该页是不会被托管的。也许试着重定向到同一个页面,你提到如果你刷新它,它会把你发送到那里,所以这可能会起作用。这没有什么区别。(而且
    应该是
    的孩子)我仍然想知道为什么我得到一个没有这个的空白页。只需让你知道第3行“if(filterContext.HttpContext.User.Identity.IsAuthenticated)”需要是“if(!filterContext.HttpContext.User.Identity.IsAuthenticated)”
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            var authenticatedUnauthorizedRouteValues =
                    new RouteValueDictionary(new {controller = "Error", action = "Index"});
    
            filterContext.Result = new RedirectToRouteResult(authenticatedUnauthorizedRouteValues);
            filterContext.Controller.TempData["message"] = 
                    "You are not authorized to view this page.";
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }