Voglio che la mia pagina di login per essere SSL solo:ASP.NET MVC: Come disabilitare automaticamente [RequireHttps] su localhost?
[RequireHttps]
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
Ma ovviamente non funziona su localhost quando sviluppo e il debug la mia domanda. Non voglio usare IIS 7 con i certificati SSL, come posso disabilitare automaticamente l'attributo RequireHttps?
Aggiornamento
Sulla base di informazioni fornite dagli utenti StackOverflow e il codice ASP.NET MVC 2 fonte ho creato la seguente classe che risolve il problema.
public class RequireSSLAttribute : FilterAttribute, IAuthorizationFilter
{
public virtual void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!filterContext.HttpContext.Request.IsSecureConnection)
{
HandleNonHttpsRequest(filterContext);
}
}
protected virtual void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.Url.Host.Contains("localhost")) return;
if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("The requested resource can only be accessed via SSL");
}
string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectResult(url);
}
}
Ed è usato in questo modo:
[RequireSSL]
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
Se si cerca Stack Overflow per "RequireHttps" alla domanda è stato chiesto un paio di volte, così un sacco di informazioni per quanto riguarda la soluzione. È una buona domanda, tuttavia, non ho ancora usato quell'attributo, ma posso vedere che si tratta di un problema immediato. –
Hai ragione. Il problema è stato risolto e ho aggiornato il mio post principale con la classe che mi ha aiutato. – Alex