跳过自定义错误页面的身份验证

时间:2015-03-26 11:28:03

标签: c# asp.net-mvc authentication redirect error-handling

我不太清楚为什么我会挣扎,因为我确信它应该很简单。我创建了一个基于.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?!?如何关闭页面的身份验证?就像它对自定义错误页面一样吗?

2 个答案:

答案 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