Abrufen der Liste der benutzerdefinierten Attribute für die aktuelle Aktion/controller in ASP.NET MVC
Check-out die Beispiel-code aus http://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvc geschrieben ASP.NET MVC2, bemerkte ich, dass Sie überprüfen können, ob eine benutzerdefinierte Attribut angewendet wird, um die aktuelle Aktion oder controller durch den Zugriff auf filterContext.ActionDescriptor
und filterContext.ActionDescriptor.ControllerDescriptor
jeweils:
public class ExitHttpsIfNotRequiredAttribute : FilterAttribute, IAuthorizationFilter {
public void OnAuthorization(AuthorizationContext filterContext) {
//snip
//abort if a [RequireHttps] attribute is applied to controller or action
if(filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;
if(filterContext.ActionDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0) return;
//snip
}
}
Was wäre das ASP.NET MVC 1-Methode zu überprüfen, die action und controller für ein benutzerdefiniertes Attribut? In ASP.NET MVC 1 es gibt keine filterContext.ActionDescriptor
, dass ich sagen kann.
InformationsquelleAutor DavGarcia | 2010-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sogar besser und zuverlässiger* Ansatz:
Aber das könnte MVC 3.0+ nur.
Mit beiden zusammen sehr gut funktionieren in MVC 4
if (filterContext.Controller.GetType().GetCustomAttributes(typeof(SkipLocationFilterAttribute), true).Any()) { return; } if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(SkipLocationFilterAttribute), false).Any()) { return; }
Ich war auf der Suche nach irgendwo zu setzen, eine vergoldete edition von Euch (die ich unabhängig voneinander abgeleitet), tada
InformationsquelleAutor Sunday Ironfoot
Vergoldet-edition, Werke auf MVC5, wahrscheinlich 4/3:
Verwendet diese Gruppe von Helfer-Erweiterungen:
Für jeden, der dies liest, die Sie ändern können
AuthorizationContext
zuActionExecutingContext
um diese Erweiterung Methoden arbeiten mit regulärenActionFilterAttribute
sGuter Punkt, danke!; bearbeitet.
ersetzen => mit return, und stellen Sie die Funktion body 😀
Seine gültige C#6 und ist so schwerer zu Lesen jetzt IMO (ich hatte es die langatmige Art und Weise vor). Aufräumen... (ja, die Java-verspannung ist extrem hässlich - hier ist die Hoffnung der Menschen bewegen zu C#6 [und Abnahme der expression-bodied members] ASAP)
InformationsquelleAutor Ruben Bartelink
Diese scheint zu funktionieren... gibt es eine bessere /richtige Weg ASP.NET MVC 1?
Sie können sehen, in der original-code in der Frage, dass dieses snippet ist in ein Attribut "public void OnAuthorization" - Methode. Wenn die RequireHttpsAttribute ist auf dem aktuellen controller oder die action, dann das beste, was zu tun ist, ist die "Rückkehr" aus der Methode und Weiterbildung auf wie nichts passiert. Aber wenn RequireHttps ist NICHT auf dem controller oder die Aktion dann ausgeführt wird code, in diesem Fall wahrscheinlich die Umleitung der browser auf eine nicht-HTTPS-Protokoll.
Beachten Sie, dass dieses snippet war für ASP.NET MVC 1, und vielleicht MVC 2. Da MVC 3, es gab schon bessere Wege zum Umgang mit der Frage der überprüfung der für die Existenz des Controllers und der action-Filter, Sonntag Ironfoot hingewiesen.
Ja mir ist aufgefallen das MVC3+ Antwort nach der Entsendung mein Kommentar, und es funktionierte für mich.
InformationsquelleAutor DavGarcia