Führen Sie beide Autorisieren Filter und Aktionsfilter auf authentifizierte ASP.NET MVC Anfrage
-
20-09-2019 - |
Frage
Ich habe meine Basis-Controller mit ein paar Aktionsfilter eingerichtet. Sie arbeiten gut.
Eines dieser Filter-Sets auf die Anfrage -. Tut Dinge wie eingestellt, um die Kultur auf der Domäne basiert, etc
Ich habe auch eine Handvoll von Aktionen, die Genehmigung erfordern das Autorisieren-Attribut.
Mein Problem ist, dass, wenn ein Benutzer versucht, eine Seite zu verlangen sie, den Zugang nicht berechtigt sind, die Genehmigung Filter Kicks in und leitet sie an einer Seite ihnen zu sagen, dass sie die Seite nicht vie können.
Das Problem ist, dass die Aktion Filter laufen nie so die Kultur und andere Anforderungsdaten nie eingestellt. Dies effektiv bewirkt, dass die Sprache in der Ansicht und anderen Daten falsch sein zu fehlen.
ich weiß, dass die Genehmigungs Filter laufen erste, aber meine Frage ist: Wie kann ich diese so gestalten, dass ich sicherstellen kann, dass bestimmte Methoden werden immer ausgeführt werden, bevor die Ansicht zurückgegeben wird, unabhängig von der Genehmigung
.Ich hoffe, das macht Sinn.
Lösung
Nach dieser Dokumentation (unter dem Filter Auftragskopf), filtern Authorization immer vor Action-Filter laufen. Dies bedeutet, dass mit Order
Eigenschaften Messing wird nicht helfen.
Ich denke, der beste Weg, dies zu handhaben ist Ihr eigenes Berechtigungs Attribut schreiben (von AuthorizeAttribute
Subklassen und zwingenden AuthorizeCore
) und läuft die Aktion Filter manuell, wenn die Autorisierung fehlschlägt.
Andere Tipps
Unter Reihenfolge der Ausführung für die Aktion Filter MSDN-Artikel auf Aktion Filter
Grundsätzlich können Sie eine Order
Eigenschaft auf diesen Kultur Filter liefern, so läuft es vor das Authorization Filter, so etwas wie folgt aus:
[CultureRedirect(Order = 1)]
public class MyBaseController : Controller { }
[Authorize(Order = 2)]
public class RequiresAuth : MyBaseController { }
...
Wenn das fehlschlägt, können Sie Execute eine Aktion ausführen und vor jeder Action wird ausgeführt wird.