MVC3在[RequireHttps]之后如何确保使用非https

本文关键字:确保 https 何确保 RequireHttps 之后 MVC3 | 更新日期: 2023-09-27 18:21:22

我找到了这篇文章,它看起来像是我应用程序所需要的,我的问题是,当不再需要https时,如何恢复到纯http?它会基于没有[RequireHttps]注释的操作固有地这样做吗?

编辑:我发现了一些关于从https转移到http的帖子。不过,我还是很感激下面这个问题的答案。

另一方面,我曾就在新窗口打开申请进行过辩论。https只适用于新窗口,这是一个公平的假设吗?

MVC3在[RequireHttps]之后如何确保使用非https

ASP.NET MVC的RequireHttps只走一条路。在过去,我刚刚创建了自己的FilterAttribute实现,以允许双向旅行:

EnsureHttpsAttribute

  public class EnsureHttpsAttribute : FilterAttribute, IAuthorizationFilter
  {
    public void OnAuthorization(AuthorizationContext filterContext)
    {
      Verify.NotNull(filterContext, "filterContext");
      Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext");
      var request = filterContext.HttpContext.Request;
      if (request.Url != null && !request.IsSecureConnection && !request.IsLocal)
        filterContext.Result = new RedirectResult("https://" + request.Url.Host + request.RawUrl);
    }
  }

保证HttpAttribute

  public class EnsureHttpAttribute : FilterAttribute, IAuthorizationFilter
  {
    public void OnAuthorization(AuthorizationContext filterContext)
    {
      Verify.NotNull(filterContext, "filterContext");
      Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext");
      var request = filterContext.HttpContext.Request;
      if (request.Url != null && request.IsSecureConnection)
        filterContext.Result = new RedirectResult("http://" + request.Url.Host + request.RawUrl);
    }
  }

如果内存服务,则与RequireHttpsAttribute实现几乎相同;尽管上面的实现检查它是否是CCD_ 2请求并且忽略切换到HTTPS。

我建议你阅读这篇文章:

http://www.codehosting.net/blog/BlogEngine/post/More-fiddling-with-MVC3-and-https.aspx