2009-07-02 13 views
8

Jeśli nie mam uprawnień w działaniu kontrolera, otrzymuję pustą stronę i brak komunikatu o błędzie? Chciałbym wyświetlić komunikat o jakimś, Oto moja konfiguracja:asp.net mvc Odpowiedź autoryzowana to pusta strona?

class MyAuth : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (!httpContext.User.Identity.IsAuthenticated) 
      return false; 

     return MyIsCurrentUserInRoles(Roles.Split(",".ToCharArray())); 
    } 
} 

stosowany jako

[Myauth(Roles="admin")] 
class MyController: Controller 
{ 
} 

a wynik jest pusta strona, kiedy nie jestem upoważniony?

Czy to zachowanie domyślne? jeśli tak, to gdzie mogę to zmienić, aby wygenerować komunikat nieautoryzowany?

Odpowiedz

8

Tak, jest to domyślne zachowanie, gdy uruchomiony na serwerze ASP.Net Development:

ASP.Net MVC Authorisation action filter

można przekierować je do strony poprzez edycję pliku web.config włączyć przekierowanie błędu 401 :

<customErrors defaultRedirect="ErrorPage.aspx" mode="On"> 
    <error statusCode="401" redirect="AccessDenied.aspx" />  
</customErrors> 
2

Można zastąpić HandleUnautoryzowany jak AuthorizeCore, aby powiedzieć przekierowanie do strony NoAccess.

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 

     filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary { 
           { "controller", "NoAuthPages" },  
           { "action", "NoAccess" }          
           }); 
    }