Tôi muốn trang đăng nhập của tôi là chỉ SSL:ASP.NET MVC: Cách tự động tắt [RequireHttps] trên localhost?
[RequireHttps]
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
Nhưng rõ ràng là nó không hoạt động trên localhost khi tôi phát triển và gỡ lỗi ứng dụng của tôi. Tôi không muốn sử dụng IIS 7 với chứng chỉ SSL, làm thế nào tôi có thể tự động vô hiệu hóa thuộc tính RequireHttps?
Cập nhật
Dựa trên thông tin được cung cấp bởi người dùng StackOverflow và ASP.NET MVC 2 mã nguồn Tôi tạo ra lớp sau đó giải quyết vấn đề.
public class RequireSSLAttribute : FilterAttribute, IAuthorizationFilter
{
public virtual void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!filterContext.HttpContext.Request.IsSecureConnection)
{
HandleNonHttpsRequest(filterContext);
}
}
protected virtual void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.Url.Host.Contains("localhost")) return;
if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("The requested resource can only be accessed via SSL");
}
string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectResult(url);
}
}
Và nó được sử dụng như thế này:
[RequireSSL]
public ActionResult Login()
{
if (Helper.LoggedIn)
{
Response.Redirect("/account/stats");
}
return View();
}
Nếu bạn tìm kiếm Stack Overflow cho "RequireHttps" câu hỏi đã được hỏi một vài lần, vì vậy rất nhiều thông tin liên quan đến giải pháp. Tuy nhiên, đó là một câu hỏi hay, tôi chưa sử dụng thuộc tính đó nhưng tôi có thể thấy đó là một vấn đề ngay lập tức. –
Bạn nói đúng. Vấn đề đã được giải quyết và tôi đã cập nhật bài đăng chính của mình với lớp học đã giúp tôi. – Alex