2011-07-04 16 views
5

Un puñado de páginas en mi sitio web necesitan usar SSL, así que he agregado [RequireHttps] a los controladores relevantes. Sin embargo, todavía quiero que la mayoría de mis páginas siempre use no SSL así que utilicé con éxito code I found on SO para crear un filtro [DoNotUseHttps] personalizado.Reemplazando un filtro de acción global

Para facilitar las cosas, me gustaría incluir este filtro no SSL de forma predeterminada, por lo que lo agregué a los filtros globales que se establecen en el archivo Global.asax. Sin embargo, parece que ahora he creado un ciclo infinito con cada filtro redirigiendo al otro.

Lo que me lleva a mi pregunta ... ¿hay algo que pueda agregar a mi filtro global para detectar si el [RequireHttps] ya se ha aplicado al controlador?

Respuesta

5

Claro, puede interrogar todo lo que quiera sobre las acciones y los controladores. Para comprobar RequireHttpsAttribute:

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    base.OnActionExecuted(filterContext); 

    bool requireHttps = filterContext.ActionDescriptor.ControllerDescriptor 
     .GetCustomAttributes(typeof(RequireHttpsAttribute), true).Length > 0 
} 
Cuestiones relacionadas