【问题标题】:ERR_TOO_MANY_REDIRECTS when forcing HTTPS on MVC5 app在 MVC5 应用程序上强制 HTTPS 时出现 ERR_TOO_MANY_REDIRECTS
【发布时间】:2017-12-01 18:06:49
【问题描述】:

我正在使用带有 SSL Gateway Free 的 OVH 服务器,我在其中托管了我的 MVC5 应用程序。

当我试图只强制 HTTPS 连接时,我的浏览器显示:

“ERR_TOO_MANY_REDIRECTS”。

我尝试了各种方法和解决方案,但都没有奏效。

我在我的项目属性中启用了 SSL,尝试通过我的 IIS 上的 URL Rewrite 重定向,然后是这个 tutorial 和许多其他人,在我的 BaseController 上使用 [RequireHttps] 以及 Application_BeginRequest() 的大量配置全球.asax。

f.e.:

protected void Application_BeginRequest()
{
    if (!Context.Request.IsSecureConnection)
    {
        // This is an insecure connection, so redirect to the secure version
        UriBuilder uri = new UriBuilder(Context.Request.Url);
        if (!uri.Host.Equals("localhost"))
        {
            uri.Port = 443;
            uri.Scheme = "https";
            Response.Redirect(uri.ToString());
        }
    }
}

不知道如何只强制 HTTPS 连接。

【问题讨论】:

  • 在本地主机上,每次我导航到任何页面时都会点击它
  • 这取决于对我的后端的 ajax 请求。但它大多不止一次
  • @DamianWoinski 您无法从 AJAX 请求重定向,您要这样做吗?
  • 我想说你的问题是 IsSecureConnection 总是返回 false。 stackoverflow.com/questions/12725859/…
  • @PeteG 我会试试的。我已经检查过了,它不起作用。我仍然看到错误

标签: c# asp.net ssl iis https


【解决方案1】:

@PeteG 的回答是对的。 IsSecureConnection 无法正常工作,您只需使用以下代码:

      protected void Application_BeginRequest()
    {
        var loadbalancerReceivedSslRequest = string.Equals(Request.Headers["X-Forwarded-Proto"], "https");
        var serverReceivedSslRequest = Request.IsSecureConnection;

        if (loadbalancerReceivedSslRequest || serverReceivedSslRequest) return;

        UriBuilder uri = new UriBuilder(Context.Request.Url);
        if (!uri.Host.Equals("localhost"))
        {
            uri.Port = 443;
            uri.Scheme = "https";
            Response.Redirect(uri.ToString());
        }
    }

【讨论】:

  • 感谢问题已解决。可悲的是在开发工具中,以及我刚刚得到“无法访问站点”的托管公司的 IIS 日志。我不得不问托管公司他们看到了什么,并说我一直在尝试重定向到 https。这把我带到了这里。非常感谢并解决了我的问题。
【解决方案2】:

因为重定向进入循环。它一次又一次地调用同一页面。像僵局一样。 使用此代码

    if (Request.Url.Scheme.Contains("http"))
{
    Response.Redirect(string.Format("https://{0}{1}", Request.Url.Authority, returnUrl), true);
}

或者

protected void Application_BeginRequest(Object source, EventArgs e)
{
  if (!Context.Request.IsSecureConnection)
  {
      Response.Redirect(Request.Url.AbsoluteUri.Replace("http://", "https://"));
  }
}

【讨论】:

  • 是的,我知道,但如何解决它
  • 什么? OP 想要重定向到 HTTPS,而您的代码正好相反
  • 你们为什么急着给负分,我在编辑帖子的同时你给负分,至少要等
  • 我喜欢这个回复,因为我一直在搜索这个错误,而正是你对回复的措辞陈述(重定向并重新重定向同一页面)让我理解了这个问题。是的,这个社区是开始时很棒,多年后让自负的人参与其中。您的回复也很有帮助。;)
猜你喜欢
  • 2014-09-27
  • 2016-12-24
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多