Revisando el código de muestra de http://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvc escrito para ASP.NET MVC2, noté que pueden verificar si un atributo personalizado se aplica a la acción o controlador actual por acceder a filterContext.ActionDescriptor
y filterContext.ActionDescriptor.ControllerDescriptor
respectivamente:Obtener la lista de atributos personalizados para la acción/controlador actual en 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
}
}
¿Cuál sería el método de ASP.NET MVC 1 de la comprobación de la acción y controlador para un atributo personalizado? En ASP.NET MVC 1 no hay filterContext.ActionDescriptor
que pueda decir.
necesito saber - ¿qué hacen estas declaraciones? ¿Por qué estás volviendo? – muttley91
Puede ver en el código original en la pregunta que este fragmento está dentro del método de "Autorización de anulación pública" de un atributo. Si RequireHttpsAttribute está en el controlador o acción actual, lo mejor que puede hacer es 'devolver' el método y continuar como si nada hubiera sucedido. Pero si RequireHttps NO está en el controlador ni en la acción, entonces ejecutará algún código, en este caso, probablemente redirija el navegador a un protocolo que no sea HTTPS. – DavGarcia
Tenga en cuenta que este fragmento fue para ASP.NET MVC 1, y tal vez MVC 2. Desde MVC 3, ha habido mejores formas de lidiar con el problema de verificar la existencia de filtros de controlador y acción como señaló Sunday Ironfoot. – DavGarcia