En cochant l'exemple de code de http://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvc écrit pour ASP.NET MVC2, j'ai remarqué qu'ils peuvent vérifier si un attribut personnalisé est appliqué à l'action ou au contrôleur en cours par accès filterContext.ActionDescriptor
et filterContext.ActionDescriptor.ControllerDescriptor
respectivement:Obtenir la liste des attributs personnalisés pour l'action/contrôleur en cours dans 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
}
}
Quelle serait la méthode ASP.NET MVC 1 de vérifier l'action et contrôleur pour un attribut personnalisé? Dans ASP.NET MVC 1, il n'y a pas filterContext.ActionDescriptor
que je peux dire.
Je dois savoir - qu'est-ce que ces déclarations font? Pourquoi êtes-vous juste de retour? – muttley91
Vous pouvez voir dans le code original de la question que cet extrait est dans la méthode "public void OnAuthorization" d'un attribut. Si le RequireHttpsAttribute est sur le contrôleur ou l'action en cours, alors la meilleure chose à faire est le 'return' hors de la méthode et continuer comme si de rien n'était. Mais si RequireHttps n'est PAS sur le contrôleur ou l'action, il exécutera du code, dans ce cas probablement redirigeant le navigateur vers un protocole non-HTTPS. – DavGarcia
Notez que cet extrait était pour ASP.NET MVC 1, et peut-être MVC 2. Depuis MVC 3, il y a eu de meilleures façons de résoudre le problème de vérification de l'existence du contrôleur et des filtres d'action comme le soulignait Sunday Ironfoot. – DavGarcia