J'ai donc trouvé l'attribut [RequiresHttps] mais une fois que vous êtes dans https votre type de bloqué ici, donc pour essayer d'avoir des actions sur une seule URL (et schéma J'ai découvert que j'ai dû créer mon propre ExtendedController pour revenir à http pour les actions qui n'utilisent pas [RequireHttps].Déplacement entre HTTP et HTTPS dans ASP.NET MVC
Je me demandais simplement si ce que je faisais était correct ou s'il y avait un meilleur moyen?
public class ExtendedController : Controller
{
protected virtual void HandleHttpRequest(AuthorizationContext filterContext)
{
if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("Cannot post between https and http.");
}
string url = "http://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectResult(url);
}
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
object[] attributes = filterContext.ActionDescriptor.GetCustomAttributes(true);
if (!attributes.Any(a => a is RequireHttpsAttribute))
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (filterContext.HttpContext.Request.IsSecureConnection)
{
this.HandleHttpRequest(filterContext);
}
}
}
}
Une chose que je viens de réaliser est que je devrais aussi vérifier sur filterContext.IsChildAction - Je me demande s'il y a un risque de rencontrer les mêmes problèmes en utilisant RequiresHttp sur les actions enfants. On dirait qu'une solution plus complète est peut-être nécessaire sur le côté de routage au lieu de sur les contrôleurs. – Mark