Asp.net 获取空白页而不是401错误页
我在IIS6上部署了一个带有Windows身份验证的ASP.NET MVC3应用程序。当经过身份验证的用户单击他们无权查看的链接时,系统会提示他们按预期输入用户名和密码(在浏览器对话框中,而不是页面中) 然而,在三次单击“取消”或输入无效凭据后,我看到的不是401未经授权的页面,而是一个空白的白色页面 查看Fiddler,单击“取消”后有三个请求/响应。以下是回复摘要和标题: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
<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);
}
}