Response.Redirect 将绝对 URL 转换为相对 URL

问题描述

我有一个 asp.net 网站 (.net 4.7.2),它使用 Response.Redirect 重定向到一些外部资源。例如。 https://mypage.com/link?id=1 次调用

HttpContext.Current.Response.Redirect("https://anotherpage.com/article.html",false);
HttpContext.Current.ApplicationInstance.CompleteRequest();

该网站在多个环境(服务器)上运行,并且在其中一些环境中重定向工作正常,但在某些情况下,附加到响应的 Location 标头已损坏 - 其值为 https://mypage.com/article.html。所以最终 URL 是当前主机名与重定向 URL 的相对路径的组合。我不明白为什么会这样。

我尝试像这样设置标题 - 这没有什么区别:

HttpContext.Current.Response.StatusCode = 302;
HttpContext.Current.Response.AddHeader("Location",redirectLink);

我想避免任何客户端黑客行为,例如呈现 javascript 重定向代码。

我的问题与此类似:Response.Redirect() is dealing an Absolute URL as an relative URL 但我没有使用任何自定义协议,而是重定向到简单且格式正确的 URL。

再说明一点:实际上这段代码在过去几年里一直有效,似乎是在安装最新的四月 Windows 更新(Windows Server 2016、kb5001347、kb5001402、kb5001649)后出现的 - 但令人惊讶的是在恢复这些更新后这个问题仍然出现这些受影响的环境。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)