ASP.NET MVC RequireHttps only works in one direction. In the past, I just created my own implementation of FilterAttribute to allow travel in both directions:
EnsureHttpsAttribute
public class EnsureHttpsAttribute : FilterAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { Verify.NotNull(filterContext, "filterContext"); Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext"); var request = filterContext.HttpContext.Request; if (request.Url != null && !request.IsSecureConnection && !request.IsLocal) filterContext.Result = new RedirectResult("https://" + request.Url.Host + request.RawUrl); } }
EnsureHttpAttribute
public class EnsureHttpAttribute : FilterAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { Verify.NotNull(filterContext, "filterContext"); Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext"); var request = filterContext.HttpContext.Request; if (request.Url != null && request.IsSecureConnection) filterContext.Result = new RedirectResult("http://" + request.Url.Host + request.RawUrl); } }
Almost the same implementation as RequireHttpsAttribute if memory serves; although the above implementation checks if this is a Local request and ignores the transition to HTTPS.
source share