Auschecken der Beispielcode von http://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvc für ASP.NET MVC2 geschrieben, bemerkte ich, dass sie überprüfen können, ob ein benutzerdefiniertes Attribut auf die aktuelle Aktion oder Controller angewendet wird Zugriff auf filterContext.ActionDescriptor
und filterContext.ActionDescriptor.ControllerDescriptor
jeweils:Get Liste der benutzerdefinierten Attribute für aktuelle Aktion/Controller in ASP.NET MVC
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 die ASP.NET MVC-1-Methode zur Überprüfung der Aktion und Controller für ein benutzerdefiniertes Attribut sein würde? In ASP.NET MVC 1 gibt es keine filterContext.ActionDescriptor
, die ich sagen kann.
ich wissen muss - was tun diese Rückkehr? Warum kommst du gerade zurück? – muttley91
Sie können im ursprünglichen Code in der Frage sehen, dass dieses Snippet innerhalb der "public void OnAuthorization" -Methode eines Attributs ist. Wenn sich das RequireHttpsAttribute auf dem aktuellen Controller oder der aktuellen Aktion befindet, ist es am besten, die Methode zurückzugeben und so fortzufahren, als wäre nichts passiert. Wenn sich RequireHttps jedoch NICHT auf dem Controller oder der Aktion befindet, wird Code ausgeführt. In diesem Fall wird der Browser wahrscheinlich auf ein Nicht-HTTPS-Protokoll umgeleitet. – DavGarcia
Beachten Sie, dass dieses Snippet für ASP.NET MVC 1 und möglicherweise MVC 2 war. Seit MVC 3 gibt es bessere Möglichkeiten, mit dem Problem der Überprüfung von Controller- und Aktionsfiltern umzugehen, wie Sunday Ironfoot herausstellte. – DavGarcia