【问题标题】:Router Port Forwarding and HttpContext.Current.Request.Url路由器端口转发和 HttpContext.Current.Request.Url
【发布时间】:2010-11-12 18:56:36
【问题描述】:

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

我们的应用程序的一部分发送使用基本 url 在应用程序中构建一些链接的电子邮件。这是在我们的应用程序启动中构建的基本 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 上找到这样的问题,但没有找到。也许我没有使用正确的关键字进行搜索,或者我需要更多的咖啡。任何关于此事的帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 不是一个选项,因为它在 Application_Start 方法中运行。这听起来也太hacky了。我需要正确设置 url 的服务器端保证(不是一个词,但听起来不错)。
      猜你喜欢
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多