2010-04-01 31 views
16

Tôi đang sử dụng ASP.NET MVC 2 và có trang đăng nhập được bảo mật qua HTTPS. Để đảm bảo rằng người dùng luôn truy cập các trang đó qua SSL, tôi đã thêm thuộc tính [RequireHttps] vào bộ điều khiển. Điều này thực hiện công việc một cách hoàn hảo.Chuyển hướng khỏi HTTPS bằng ASP.NET MVC App

Khi đăng nhập thành công, tôi muốn chuyển hướng chúng trở lại phiên bản HTTP. Tuy nhiên, không có thuộc tính [RequireHttp] và tôi đang cố gắng để có được đầu của tôi xung quanh cách tôi có thể đạt được điều này.

Biến thể (tiềm năng) được thêm vào là trang web khi sản xuất được lưu trữ trên tuyến của miền, nhưng cho mục đích phát triển và thử nghiệm, nó nằm trong thư mục con/thư mục/ứng dụng ảo.

Tôi đã suy nghĩ quá mức và có một giải pháp dễ dàng nào đang nhìn chằm chằm vào mặt tôi không? Hay nó phức tạp hơn một chút?

+0

thể trùng lặp của http://stackoverflow.com/questions/761704/mixed-http-https-site – Gonzalo

+4

Đây không phải là một bản sao (ít nhất không thuộc về một trong các liên kết Gonzalo) như tôi muốn đi du lịch Cách khác. * từ * HTTPS * đến * HTTP. Trừ khi có một tham số mà tôi không thể tìm thấy trên '[RequireHttps]', thì điều đó không được sử dụng với tôi. – Amadiere

Trả lời

25

Sau một chút đào, tôi đã đi dọc theo đường lăn của riêng mình vì dường như không có giải pháp tích hợp tốt cho điều này (như đã đề cập, có một giải pháp tuyệt vời cho ứng dụng MVC2 trong biểu mẫu của [RequireHttps]). Lấy cảm hứng từ giải pháp çağdaş 's để this problem và tôi adapated để đến với đoạn mã sau:

public class RequireHttp : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // If the request has arrived via HTTPS... 
     if (filterContext.HttpContext.Request.IsSecureConnection) 
     { 
      filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.Url.ToString().Replace("https:", "http:")); // Go on, bugger off "s"! 
      filterContext.Result.ExecuteResult(filterContext); 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 

bây giờ tôi có thể thêm video này vào phương pháp điều khiển của tôi và nó cư xử (dường như) như mong đợi. Nếu tôi chuyển hướng đến hành động Index trên bộ điều khiển của tôi từ một giao thức HTTPS, nó sẽ chuyển hướng đến HTTP. Nó chỉ cho phép truy cập HTTP vào Index ActionResult.

[RequireHttp] 
public ActionResult Index() { 
    return View(); 
} 
Các vấn đề liên quan