2009-10-15 18 views

cevap

11

Benim tahminim:

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

} 
+1

Bu, HTTP isteklerini engelliyor gibi görünüyor, ancak HTTPS'ye yönlendirmiyor. –

+0

Hayır. Bu, Visual Studio'nun ASP.NET Geliştirme Sunucusu'nda bir sorun olabilir. http://stackoverflow.com/questions/60113/ –

+5

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

15

seni bunun için kendi ActionFilterAttribute rulo ihtiyacımız olacak düşünüyorum. Sonra denetleyicisi

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

:

public class HomeController : Controller { 

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

Siz de this okuyabilirsiniz.

+0

Bunu, POST yöntemine yönelik bir eyleme eklerken dikkatli olun. – Carl

+1

@Carl neden? posta verileri kaybolduğu için mi? Hassas verilerin https olmayan bir şekilde gönderilmemesini sağlamak istiyorsanız, bu verileri işlememeniz gerekir. – eglasius

+1

@ çağdaş Şemayı değiştirmek için bu yöntemi kullanmak isteyebilirsiniz - bir dizgeden daha güvenli olmalı: http://stackoverflow.com/questions/17968426/changing-the-scheme-of-system-uri –