Umleitung vom Aktionsfilter-Attribut
Was ist der beste Weg, um eine Umleitung in eine ActionFilterAttribute
. Ich habe eine ActionFilterAttribute
genannt IsAuthenticatedAttributeFilter
und dass überprüft den Wert einer session-variable. Wenn die variable false ist, möchte ich die Anwendung umleiten auf die login-Seite. Ich würde es vorziehen, die Umleitung über die route name SystemLogin
jedoch keine redirect-Methode an dieser Stelle wäre in Ordnung.
Kommentar zu dem Problem
InformationsquelleAutor der Frage ryanzec | 2011-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Set filterContext.Ergebnis
Mit der route name:
Können Sie auch etwas tun wie:
Wenn Sie verwenden möchten
RedirectToAction
:Könnten Sie eine öffentliche
RedirectToAction
Methode auf dem controller (vorzugsweise auf seinem Basis-controller) , ruft einfach die geschütztRedirectToAction
ausSystem.Web.Mvc.Controller
. Hinzufügen diese Methode erlaubt es, für einen öffentlichen Aufruf IhreRedirectToAction
aus dem filter.Dann ist dein filter Aussehen würde, so etwas wie:
InformationsquelleAutor der Antwort CRice
Alternativ zu einer Umleitung, wenn Sie fordert, Ihren eigenen code, den Sie verwenden könnten:
Ist es nicht ein reiner redirect, sondern liefert ein ähnliches Ergebnis, ohne unnötigen overhead.
InformationsquelleAutor der Antwort Syakur Rahman
Ich bin mit MVC4, die ich verwendet folgenden Ansatz zur Umleitung einer benutzerdefinierten html-Bildschirm auf Genehmigung Verletzung.
Erweitern
AuthorizeAttribute
sagenCutomAuthorizer
überschreiben Sie die
OnAuthorization
undHandleUnauthorizedRequest
Registrieren
CustomAuthorizer
imRegisterGlobalFilters
.bei der Ermittlung der
unAuthorized
Zugang callHandleUnauthorizedRequest
und Weiterleitung an die betreffenden controller-Aktion, wie unten gezeigt.InformationsquelleAutor der Antwort user2834076
Klingt es wie Sie wollen, Sie zu re-implementieren, oder möglicherweise verlängern,
AuthorizeAttribute
. Wenn dem so ist, sollten Sie sicherstellen, dass Sie Erben, und nichtActionFilterAttribute
, um zu lassen ASP.NET MVC mehr tun, die Arbeit für Sie.Auch Sie wollen, stellen Sie sicher, dass Sie autorisieren vor Sie haben die eigentliche Arbeit in der action-Methode - anders, der einzige Unterschied zwischen angemeldet und nicht wird sein, was die Seite, die Sie sehen, wenn die Arbeit getan ist.
Es ist eine gute Frage mit einem Antwort mit mehr details hier auf SO.
InformationsquelleAutor der Antwort Tomas Lycken
Versuchen Sie folgenden Abschnitt, es sollte ziemlich klar sein:
InformationsquelleAutor der Antwort msoliman
könnten Sie Erben den controller dann verwenden Sie es in Ihrem action-filter
in Ihrem ActionFilterAttribute Klasse:
in Ihrem Basis-controller:
Nachteile. dieses ist zu ändern, alle Controller Erben von "MyController" Klasse
InformationsquelleAutor der Antwort msoliman
Hier ist eine Lösung, die auch berücksichtigt, wenn Sie mit Ajax-Anfragen.
InformationsquelleAutor der Antwort Mike