为401提供自定义错误页面(授权失败)

时间:2012-06-12 09:17:36

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

我正在使用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特定方式?

1 个答案:

答案 0 :(得分:2)

您可以覆盖HandleUnauthorizedRequest

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