2008-09-21 12 views
2

Ich bin auf der Suche nach der Ergebnisaktion von einem fehlgeschlagenen IAuthorizationFilter. Ich bin mir jedoch nicht sicher, wie ich ein ActionResult im Filter erstellen kann. Der Controller scheint nicht aus dem Filter herauszusperren, so dass meine normale Ansicht ("SomeView") nicht funktioniert. Gibt es eine Möglichkeit, den Controller zu verwenden, oder eine andere Möglichkeit, ein Actionresult zu erstellen, da es nicht als instanziierbar erscheint?Einstellung Ergebnis für IAuthorizationFilter

funktioniert nicht:

[AttributeUsage(AttributeTargets.Method)] 
    public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter 
    { 
    public void OnAuthorization(AuthorizationContext context) 
    { 
     if (!context.HttpContext.User.Identity.IsAuthenticated) 
     { 
      context.Result = View("User/Login"); 
     } 
    } 
} 

Antwort

1

Sie die entsprechende Action direkt instanziieren kann, es dann auf den Kontext. Zum Beispiel:

public void OnAuthorization(AuthorizationContext context) 
{ 
    if (!context.HttpContext.User.Identity.IsAuthenticated) 
    { 
     context.Result = new ViewResult { ViewName = "Whatever" }; 
    } 
} 
2

Sie bei der Umsetzung von IAuthorizationFilter aussehen sollte, die mit dem MVC-Framework kommt, AuthorizeAttribute. Wenn Sie die Formularauthentifizierung verwenden, müssen Sie das Ergebnis nicht auf Benutzer/Anmeldung festlegen. Sie können eine 401-HTTP-Statusantwort auslösen, und ASP.NET wird auf die Anmeldeseite für Sie umgeleitet.

Das einzige Problem beim Festlegen des Ergebnisses für Benutzer/Login ist, dass die Adressleiste des Benutzers nicht aktualisiert wird. Daher befinden sie sich auf der Anmeldeseite, die URL stimmt jedoch nicht überein. Für manche Leute ist das kein Problem. Manche Leute möchten jedoch, dass die URL ihrer Website dem entspricht, was der Nutzer in ihrem Browser sieht.

Verwandte Themen