2009-10-15 34 views

Trả lời

11

tôi đoán:

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

} 
+1

Điều đó dường như ngăn chặn các yêu cầu HTTP, nhưng nó không chuyển hướng đến HTTPS. –

+0

No. Điều này có thể chỉ là một vấn đề với máy chủ phát triển ASP.NET của Visual Studio. http://stackoverflow.com/questions/60113/ –

+5

ASP.NET MVC RequireHttps chỉ trong sản xuất: http://stackoverflow.com/questions/1639707/asp-net-mvc-requirehttps-in-production-only –

15

Tôi nghĩ rằng bạn sẽ cần phải cuộn của riêng ActionFilterAttribute của bạn cho điều đó.

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

Sau đó, trong điều khiển của bạn:

public class HomeController : Controller { 

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

Bạn có thể muốn đọc this là tốt.

+0

Hãy cẩn thận khi thêm mục này vào một hành động dành cho phương thức POST. – Carl

+1

@Carl tại sao? vì dữ liệu bài đăng bị mất? Nếu bạn muốn đảm bảo rằng dữ liệu nhạy cảm không được đăng trên không https, thì bạn không nên xử lý dữ liệu đó. – eglasius

+1

@ çağdaş Bạn có thể muốn sử dụng phương pháp này để thay đổi lược đồ - nên an toàn hơn một chuỗi thay thế: http://stackoverflow.com/questions/17968426/changing-the-scheme-of-system-uri –