我不太清楚为什么我会挣扎,因为我确信它应该很简单。我创建了一个基于.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。 [AllowAnonymoous]无法使用,因为这是授权。如何阻止MVC尝试进行身份验证?
这一定很容易,我可以想到一个你想要这种行为的常见例子。面向公众的网站可能希望对内部员工使用Windows身份验证,但允许公众浏览未经身份验证的身份。
我怎样才能做到这一点?
当用户未经过身份验证时,401会绕过我的GlobalErrorAttribute?!?如何关闭页面的身份验证?就像它对自定义错误页面一样吗?
答案 0 :(得分:2)
可以使用配置文件中的<location>
元素指定指定配置设置必须应用的资源。
更多关于MSDN的信息: <location> Element
<强>更新强>
例如,你可以改进并添加这样的东西。
<location path="Errors/MyCustomPage">
<system.web>
<authorization>
<allow verbs="GET" users="*" />
</authorization>
</system.web>
</location>
答案 1 :(得分:1)
<强>更新强> 通过命令行appcmd set config / section为应用程序启用匿名身份验证:anonymousAuthentication / enabled:true