如何覆盖 Response.Redirect 以防止端口随之而来

Posted

技术标签:

【中文标题】如何覆盖 Response.Redirect 以防止端口随之而来【英文标题】:How to overwrite Response.Redirect to prevent port coming with it 【发布时间】:2010-10-25 14:35:24 【问题描述】:

我的负载均衡器将外部端口 80 转换为本地端口 801。当谈到服务器时,服务器显然会看到端口 801,并且在 Response.Redirect 中它会尝试将端口 801 注入到它重定向到的 URL 中,但这不是我想要的解决方案。

我的想法是: 1. 覆盖 Response.Redirect 以便我从中删除端口。 2. 在 web.config 中进行某种配置以忽略该端口。 3. 解决问题最讨厌的方法是更改​​整个应用程序以使用 Response.Redirect 中的完整 URL,这是一个很大的痛苦。

这个问题有好的解决办法吗?

环境: Windows Vista、Windows 2003 服务器、Windows 2008 服务器 IIS 6、IIS 7 ASP.NET C# & VB.NET

【问题讨论】:

【参考方案1】:

好的,

我自己得到了答案。我希望这个解决方案对其他人也有用。

嗯,答案在 web.config 中。 下

<system.web>
<httpRuntime useFullyQualifiedRedirectUrl="false" maxRequestLength="2526" requestLengthDiskThreshold="2526"/>
</system.web>

其中重要的部分是错误的。

useFullyQualifiedRedirectUrl="false"

默认情况下是这样。

【讨论】:

【参考方案2】:

您需要它作为重定向,还是只使用 Server.Transfer()?

【讨论】:

我实际上需要被重定向。【参考方案3】:

将其重定向到原始主机名,以便它通过负载平衡器,而无需任何明确的端口。重定向是通过编程方式构建(或可以构建)的,因此您应该能够避免该问题。

【讨论】:

这就是我们正在做的事情,但端口进入了画面。而且我已经有很多重定向(数百个)【参考方案4】:

我的应用程序有直接操纵HttpContext.Current.Response.RedirectLocation 的代码。它引用了HttpContext.Current.Request.Url.Authority,其中包括端口信息。

我查看了所有请求属性,但找不到任何显示地址栏中直接指定的端口与通过负载平衡器指定的端口之间存在差异的任何内容。

这个应用程序从来不需要重定向到一个非标准端口,所以我将Authority的引用替换为不包含端口信息的DnsSafeHost

【讨论】:

以上是关于如何覆盖 Response.Redirect 以防止端口随之而来的主要内容,如果未能解决你的问题,请参考以下文章

response.Redirect如何在新窗口打开

用Response.Redirect()如何实现跳转frame框架!!!

asp怎样用response.Redirect进行页面跳转。

asp怎样用response.Redirect进行页面跳转。

response.redirect 用法

Response.Write 和 Response.redirect 不可同时使用