2009-10-15 17 views

Odpowiedz

11

Zgaduję:

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

} 
+1

To wydaje się blokować żądania HTTP, ale nie przekierowuje do HTTPS. –

+0

Nie. Może to być problem z programem ASP.NET Development Server programu Visual Studio. http://stackoverflow.com/questions/60113/ –

+5

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

15

Chyba będziesz musiał toczyć swoim własnym ActionFilterAttribute do tego.

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

Następnie w kontrolerze:

public class HomeController : Controller { 

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

Czasami warto czytać this również.

+0

Należy zachować ostrożność podczas dodawania go do akcji przeznaczonej dla metody POST. – Carl

+1

@Carl dlaczego? ponieważ dane dotyczące poczty zostały utracone? Jeśli chcesz się upewnić, że poufne dane nie są przesyłane przez inne niż https, nie powinieneś przetwarzać tych danych. – eglasius

+1

@ çağdaş Możesz użyć tej metody do zmiany schematu - powinna być bezpieczniejsza niż zamiana ciągu: http://stackoverflow.com/questions/17968426/changing-the-scheme-of-system-uri –