【问题标题】:Provide a custom error page for 401 (failed authorization)为 401(授权失败)提供自定义错误页面
【发布时间】:2013-05-11 17:55:22
【问题描述】:

我正在使用 Windows 身份验证。身份验证工作正常(用户加载了它的角色)。

当授权失败(使用Authorize)属性时,我想提供一个自定义错误页面。似乎 HandleError 属性仅被引发的异常调用,而不是任何错误状态代码 (>= 300)。

自定义错误部分:

<customErrors mode="On" defaultRedirect="~/Error/">
  <error statusCode="404" redirect="~/Error/NotFound/" />
  <error statusCode="401" redirect="~/Error/NotAuthorized/" />
</customErrors>

我得到了一个返回视图的ErrorController。但它永远不会被调用。

我是否必须开始在自定义 Authorize 属性中引发异常才能处理 401,还是有更好的 MVC3 特定方法?

【问题讨论】:

    标签: c# asp.net-mvc authorization custom-error-pages


    【解决方案1】:

    您可以覆盖CustomAuthorize 中的HandleUnauthorizedRequest

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
                                             {
                                                 {"area", ""},
                                                 {"controller", "Error"},
                                                 {"action", "NotAuthorized"},
                                                 {"returnUrl", filterContext.HttpContext.Request.RawUrl}
                                             });
    }
    

    【讨论】:

    • 当然。但是该处理获取特定于实现,因为它无法扩展。我宁愿坚持我目前的解决方案:blog.gauffin.org/2012/06/…
    • @jgauffin 我认为不需要异常,因为没有任何代码错误。您可以将用户重定向到您的 NotAuthorized 错误页面而不会出现异常,那么抛出异常有什么意义呢??
    • 我将您的解决方案与另一个在自定义授权属性中生成整个结果的解决方案混合在一起。
    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2016-04-24
    • 2021-03-26
    • 2016-03-19
    相关资源
    最近更新 更多