2009-10-15 4 views

Répondre

11

Je pense:

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

} 
+1

Cela semble empêcher les requêtes HTTP, mais il ne redirige pas vers HTTPS. –

+0

Non. Cela peut être un problème avec le serveur de développement ASP.NET de Visual Studio. http://stackoverflow.com/questions/60113/ –

+5

ASP.NET MVC RequireHttps en production uniquement: http://stackoverflow.com/questions/1639707/asp-net-mvc-requirehttps-in-production-only –

15

Je pense que vous allez avoir besoin de rouler votre propre ActionFilterAttribute pour cela.

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); 
    } 
} 

Ensuite, dans votre contrôleur:

public class HomeController : Controller { 

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

Vous pouvez lire this aussi bien.

+0

Faites attention lorsque vous ajoutez ceci à une action destinée à la méthode POST. – Carl

+1

@Carl pourquoi? parce que les données de poste sont perdues? Si vous voulez vous assurer que les données sensibles ne sont pas affichées sur des non-https, vous ne devez pas traiter ces données. – eglasius

+1

@ çağdaş Vous pouvez utiliser cette méthode pour changer le schéma - devrait être plus sûr qu'une chaîne remplacer: http://stackoverflow.com/questions/17968426/changing-the-scheme-of-system-uri –