路由器端口转发和HttpContext.Current.Request.Url

时间:2009-07-21 20:14:51

标签: iis-6 asp.net-2.0 portforwarding

这是场景。我们有一个端口的路由器转发我们不同测试站点的请求。例如,http://www.ourSite.com:8051从路由器转发到端口80上的Web服务器。测试网站是在IIS6(Windows Server 2003)上运行的一个网站的虚拟目录。

我们的部分应用程序会发送使用基本网址在应用程序中构建一些链接的电子邮件。这是我们在应用程序启动时构建的基本URL:

siteBaseUrl = string.Format("{0}://{1}{2}",
                HttpContext.Current.Request.Url.Scheme,
                HttpContext.Current.Request.Url.Authority,
                HttpContext.Current.Request.ApplicationPath.TrimEnd('/'));

因此,假设我们的某个测试网站看起来像http://www.ourSite.com:8051/client1。我希望siteBaseUrl看起来像这样,http://www.ourSite.com:8051/client1,实际上它看起来像这样http://www.ourSite.com/client1(我试着在StackOverflow上找到这样的问题,但没有找到。也许我没有搜索到正确的关键词,或者我需要更多的咖啡。对此事的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

HttpContext.Current.Request.Url基于IIS请求的资源,它不代表客户端请求Url。但是,您可以使用HTTP标头中的Host属性。

siteBaseUrl = string.Format("{0}://{1}{2}",
                HttpContext.Current.Request.Url.Scheme,
                HttpContext.Current.Request.Headers["host"],
                HttpContext.Current.Request.ApplicationPath.TrimEnd('/'));

答案 1 :(得分:0)

如果端口号被路由器剥离,您可以随时使用javascript抓取网址并将其发送到服务器。