我不太确定为什么要为此苦苦挣扎,因为我确信它应该很简单。我创建了一个基于 .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");
}
}
}
这个重定向当然需要一个很好的 Controller ,这是非常基本的;
public class ErrorsController : Controller
{
public ActionResult MyCustomPage()
{
return View();
}
}
我的问题
它重定向到的这个美妙的错误页面抛出 401,因为它仍在尝试进行身份验证。 [AllowAnonymous] 将不起作用,因为这是授权。如何阻止 MVC 尝试进行身份验证?
这一定很简单,我可以想到一个您希望这种行为的常见示例。面向公众的网站可能希望在内部为员工使用 Windows 身份验证,但允许公众浏览未经身份验证的内容。
我怎样才能做到这一点?
更新
当用户未通过身份验证时,401 会绕过我的 GlobalErrorAttribute?!?如何关闭页面的身份验证?就像自定义错误页面一样?
最佳答案
可以使用 <location>
来指定指定的配置设置必须应用于的资源。配置文件中的元素。
更多关于 MSDN 的信息: <location> Element
更新:
例如,您可以改进并添加类似这样的内容。
<location path="Errors/MyCustomPage">
<system.web>
<authorization>
<allow verbs="GET" users="*" />
</authorization>
</system.web>
</location>
关于c# - 跳过自定义错误页面的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29277253/