2010-04-01 9 views
16

Ich benutze ASP.NET MVC 2 und haben eine Login-Seite, die über HTTPS gesichert ist. Um sicherzustellen, dass der Benutzer immer über SSL auf diese Seiten zugreift, habe ich dem Controller das Attribut [RequireHttps] hinzugefügt. Das macht den Job perfekt.Umleiten weg von HTTPS mit ASP.NET MVC App

Wenn sie sich erfolgreich angemeldet haben, möchte ich sie zurück zu HTTP-Version umleiten. Allerdings gibt es kein [RequireHttp] Attribut und ich kämpfe um meinen Kopf herum, wie ich das erreichen könnte.

Die hinzugefügte (mögliche) Komplikation ist, dass die Website, wenn sie in Produktion ist, auf der Route der Domäne gehostet wird, aber zu Entwicklungs- und Testzwecken in einem Unterverzeichnis/virtuellen Verzeichnis/Anwendung.

Überlege ich das und gibt es eine einfache Lösung, die mir ins Gesicht schaut? Oder ist es ein bisschen komplexer?

+0

möglich Duplikat http://stackoverflow.com/questions/761704/mixed-http-https-site – Gonzalo

+4

Dies ist kein Duplikat (zumindest nicht von dem einem Gonzalo Link) als ich reisen mag der andere Weg. * Von * HTTPS * zu * HTTP. Wenn es keinen Parameter gibt, den ich nicht bei '[RequireHttps]' finden kann, ist das für mich nicht von Nutzen. – Amadiere

Antwort

25

Nach ein wenig Graben, ging ich entlang der Linien des Rollens mein eigenes, da es schien nicht eine gute integrierte Lösung zu sein (wie erwähnt, gibt es eine große für MVC2-Anwendungen in der Form von [RequireHttps]). Inspiriert von çağdaş ‚s Lösung this problem und ich adapated mit dem folgenden Code zu kommen:

public class RequireHttp : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // If the request has arrived via HTTPS... 
     if (filterContext.HttpContext.Request.IsSecureConnection) 
     { 
      filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.Url.ToString().Replace("https:", "http:")); // Go on, bugger off "s"! 
      filterContext.Result.ExecuteResult(filterContext); 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 

Ich kann jetzt In meine Controller-Methoden und es verhält sich (scheinbar) wie erwartet. Wenn ich von einem HTTPS-Protokoll zur Index-Aktion auf meinem Controller umadressiere, wird es zu HTTP umgeleitet. Es erlaubt nur HTTP-Zugriff auf das Index ActionResult.

[RequireHttp] 
public ActionResult Index() { 
    return View(); 
} 
Verwandte Themen