jgauffin
jgauffin

Reputation: 101140

Provide a custom error page for 401 (failed authorization)

I'm using Windows Authentication. The authentication works fine (the user is loaded with it's roles).

It's when authorization fails (using the Authorize) attribute that I want to provide a custom error page. It seems like the HandleError attribute only gets invoked for thrown exceptions but not for any error status codes (>= 300).

Custom errors section:

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

I got an ErrorController which returns views. But it do never get called.

Do I have to start throwing exceptions in a custom Authorize attribute to be able to handle 401, or is there a better MVC3 specific way?

Upvotes: 1

Views: 2060

Answers (1)

Wahid Bitar
Wahid Bitar

Reputation: 14074

You can override the HandleUnauthorizedRequest in your CustomAuthorize

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

Upvotes: 3

Related Questions