【发布时间】:2015-03-26 11:28:03
【问题描述】:
我不太确定我为什么要为此苦苦挣扎,因为我确信它应该很简单。我创建了一个基于 .net 4.5 的 MVC 5 Web 应用程序。我在 web.config 中启用了 Windows 身份验证,如下所示;
<system.web>
<Authentication mode="windows" />
</system.web>
这是完美的工作。实际上,我对新框架让它变得如此简单感到惊讶。当用户导航到我的站点时,它会对其进行身份验证并将其登录,这很酷。当它无法对用户进行身份验证时会产生 401 错误,我想为此错误提供一个自定义页面。为了捕捉 401,我使用了以下伪代码;
public class GlobalErrorAttribute : ErrorHandlerAttribute
{
public override OnError(filterContext _context)
{
if(statusCode = 401)
{
_context.Result = RedirectTo("~/Errors/MyCustomPage");
}
}
}
这个重定向当然需要一个控制器,这很好,很基础;
public class ErrorsController : Controller
{
public ActionResult MyCustomPage()
{
return View();
}
}
我的问题
它重定向到的这个美妙的错误页面会抛出 401,因为它仍在尝试进行身份验证。 [AllowAnonymous] 将不起作用,因为这是授权。如何阻止 MVC 尝试进行身份验证?
这一定很简单,我可以想到一个你想要这种行为的常见示例。面向公众的网站可能希望在本地对员工使用 Windows 身份验证,但允许公众未经身份验证浏览。
我怎样才能做到这一点?
更新
当用户未通过身份验证时,401 会绕过我的 GlobalErrorAttribute?!?如何关闭页面的身份验证?就像自定义错误页面一样?
【问题讨论】:
-
是“错误”控制器名称中的拼写错误还是 MVC 5 允许控制器名称不带“控制器”后缀?
-
对不起,只是我懒惰,我没有复制和粘贴任何东西。虽然如果这是问题,我不会收到 401 :) 问候,Dan。
标签: c# asp.net-mvc authentication redirect error-handling