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

标签 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");
         }
     }
}

这个重定向当然需要一个很好的 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/

相关文章:

java - JSF 中基于表单的身份验证

Java Swing : How can I implement a login screen before showing a JFrame?

c# - WPF/MVVM : Need help to fix a broken binding with ContentControl + DataTemplate

c# - 在 Dapper.NET 中使用 varbinary 参数

python - HTTLlib2 是否支持 NTLM 身份验证。如果没有具体解释?

mysql - 需要对代码进行一些修改

c# - ASP MVC : How get roles from ApplicationUser

c# - ILGenerator 调用带有参数的实例方法

c# - .net 核心 2.2 EF : SaveChangesAsync() setting unrelated columns to null

javascript - Excel 文件通过 POST 下载 C#(避免 404.15 查询字符串错误)