【问题标题】:Not redirecting properly in asp.net在 asp.net 中无法正确重定向
【发布时间】:2021-11-02 17:39:23
【问题描述】:

我有一个旧的基于 asp.net webform 的网站,我想将流量从 HTTP 重定向到 HTTPS

我正在使用下面的代码

if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("http://example.com") || HttpContext.Current.Request.Url.ToString().ToLower().Contains("http://www.example.com"))
{
    HttpContext.Current.Response.Status = "301 Moved Permanently";
    Response.RedirectPermanent("https://www.example.com/en/", false);
}

上面的代码应该适用于所有基于 HTTP 的 url,但它只能在 url 下方正确重定向

重定向适用于以下

但如果我有更长的网址,如下所示,它不会重定向

我不确定我是否在代码中做错了什么?当我使用.Contains() 时,它应该将所有基于 HTTP 的 url 重定向到 HTTPS

更新:我意识到我必须使用HttpContext.Current.Request.Url.AbsoluteUri 来获取完整的 URL 路径。 即使更改了代码 if 块也没有被执行,我注意到两件事

  • HttpContext.Current.Request.Url.AbsoluteUri 的输出返回 Secure,但在浏览器上它总是显示不安全,如屏幕截图所示
  • 其次,当我在 Incognito 上运行同一页面或在 Chrome 或 FF 上作为 Private 运行时,它会从显示页面重定向为安全但不执行 if 语句。

所以在这两种情况下,事情都是令人困惑的

if (HttpContext.Current.Request.Url.AbsoluteUri.ToString().ToLower().Contains("http://example.com") || HttpContext.Current.Request.Url.AbsoluteUri.ToString().ToLower().Contains("http://www.example.com"))
{
    HttpContext.Current.Response.Status = "301 Moved Permanently";
    Response.RedirectPermanent("https://www.example.com/en/", false);
}

test.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

【问题讨论】:

  • 您是否尝试调试以查看这些 URL 是否实际命中了此代码?你把这段代码放在哪里了?

标签: c# asp.net .net webforms


【解决方案1】:

这是因为您检查的是名称而不是安全的 httphttps 这是另一个示例,它仅检查安全连接,而不是 URL。

protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;

        if(!app.Response.Request.IsSecureConnection)
        {
            app.Response.Redirect(Request.RawUrl.Replace("http://","https://"), true);
            return;
        }
    }

更新

带有红线的锁表示已部分加密 - 表示您页面内的某些链接仍然是 http。

使用上面的代码,您可以确保从 asp.net 传递的所有链接都是安全的 - 如果仍然继续显示部分安全,请检查所有安全的 javascript 链接(或其他链接)。

【讨论】:

  • 肯定会尝试您的代码,因为它应该可以工作。看来我的代码没有检查 http 部分。据我了解HttpContext.Current.Request.Url.ToString() 也得到了http 部分。我可以将其替换为 HttpContext.Current.Request.Url.AbsoluteUri 以获取完整的 URL 只是在代码中出现了我没有注意到的错误
  • @Learning this Request.RawUrl 是完整的 url - IsSecureConnection 可以检查 http/https
  • @Learning - 那里的锁意味着部分加密,我已经更新了我的答案
  • 我正在测试的页面只是一个简单的测试页面,没有链接我加倍检查只是为了确定。其简单的 asp.net 网页表单页面在 .aspx 文件中没有链接,而 asps.cs 仅包含我的问题中提到的代码。
  • @Learning检查插件,用其他浏览器检查
猜你喜欢
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多