2009-10-15 2 views

Antwort

11

Meine Vermutung:

[RequireHttps] //apply to all actions in controller 
public class SomeController 
{ 
    //... or ... 
    [RequireHttps] //apply to this action only 
    public ActionResult SomeAction() 
    { 
    } 

} 
+1

Das scheint HTTP-Anfragen zu verhindern, leitet es aber nicht an HTTPS weiter. –

+0

Nein. Dies könnte nur ein Problem mit Visual Studio ASP.NET Development Server sein. http://StackOverflow.com/Questions/60113/ –

+5

ASP.NET MVC RequireHttps nur in der Produktion: http://Stackoverflow.com/questions/1639707/asp-net-mvc-requirehttps-in-production-only –

15

Ich denke, du wirst deine eigene ActionFilterAttribute dafür rollen müssen.

public class RedirectHttps : ActionFilterAttribute { 
    public override void OnActionExecuting(ActionExecutingContext filterContext) { 
     if (!filterContext.HttpContext.Request.IsSecureConnection) { 
      filterContext.Result = 
       new RedirectResult(filterContext.HttpContext.Request.Url. 
        ToString().Replace("http:", "https:")); 
      filterContext.Result.ExecuteResult(filterContext); 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 

Dann in Ihrem Controller:

public class HomeController : Controller { 

    [RedirectHttps] 
    public ActionResult SecuredAction() { 
     return View(); 
    } 
} 

Sie könnten this auch lesen wollen.

+0

Seien Sie vorsichtig, wenn Sie dies zu einer Aktion hinzufügen, die für die POST-Methode vorgesehen ist. – Carl

+1

@Carl warum? weil die Postdaten verloren sind? Wenn Sie sicherstellen möchten, dass sensible Daten nicht über nicht https verbreitet werden, sollten Sie diese Daten nicht verarbeiten. – eglasius

+1

@ çağdaş Sie können diese Methode verwenden, um das Schema zu ändern - sollte sicherer als eine Zeichenfolge ersetzen: http://stackoverflow.com/questions/17968426/changing-the-schema-of-system-uri –