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

Jar*_*red 6 c# https annotations asp.net-mvc-3

我找到了这篇帖子,它看起来像我需要的应用程序,我的问题是,当不再需要https时,你如何恢复到简单的http?基于没有[RequireHttps]注释的动作,它本身会这样做吗?

编辑:我发现一些帖子谈论从https转到http(这里这里).但是,我仍然对以下问题的答案表示赞赏.

或者,我一直在讨论如何在新窗口中打开应用程序.https只适用于新窗口,这是一个公平的假设吗?

Chr*_*ter 7

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);
    }
  }
Run Code Online (Sandbox Code Playgroud)

EnsureHttpAttribute

  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);
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果内存服务,几乎与RequireHttpsAttribute相同的实现; 虽然上面的实现检查它是否是Local请求并忽略切换到HTTPS.