2009-10-15 19 views

Respuesta

11

Mi suposición:

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

} 
+1

Parece prevenir las solicitudes HTTP, pero no redirige a HTTPS. –

+0

No. Esto podría ser solo un problema con el servidor de desarrollo ASP.NET de Visual Studio. http://stackoverflow.com/questions/60113/ –

+5

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

15

creo que vas a tener que rodar su propia ActionFilterAttribute para eso.

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

Luego, en su controlador:

public class HomeController : Controller { 

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

Es posible que desee leer this también.

+0

Tenga cuidado al agregar esto a una acción destinada al método POST. – Carl

+1

@Carl ¿por qué? porque los datos de la publicación se pierden? Si desea asegurarse de que los datos confidenciales no se publiquen en https no, entonces no debe procesar esos datos. – eglasius

+1

@ çağdaş Es posible que desee utilizar este método para cambiar el esquema; debería ser más seguro que reemplazar una cadena: http://stackoverflow.com/questions/17968426/changing-the-scheme-of-system-uri –