【问题标题】:Port in the URLURL 中的端口
【发布时间】:2010-02-16 15:38:59
【问题描述】:

我有一个 Web 应用程序,我将它部署到多个应用程序,例如 -

https://customerinternaldomain.com/thewebapp

有很多链接会弹出打开的窗口。过去我使用以下方法来确定要弹出的窗口的 url。

string appPath = this.Request.ApplicationPath;
      if ( !appPath.EndsWith ( "/" ) )
        appPath += "/";
      string sURL = this.Request.Url.Scheme + "://" + this.Request.Url.Authority
        + appPath 

然后我只是附加到我想打开的窗口页面的路径上

appPath += "somefolder/window.aspx"

我们的一个安装刚刚移到了一个非标准端口,比如 20055。

所以我想出了一个干净的完整证明方法来确保将端口插入到路径中,但是由于 webapp 映射到 https://internaldomain.com/thewebapp 而不仅仅是 https://internaldomain.com/ 我不是看到使用请求服务器变量执行此操作的干净方式。当然,我可以使用拆分或其他东西来破解和削减,或者将基本 Web 路径存储在可以读取的配置文件中。只是想知道是否有人有这样做的干净方法。假设我只是想念一些明显的东西,所以我想我会把最好的和最聪明的放在上面。

感谢您提供的任何帮助,我知道时间很宝贵。我很感激。

【问题讨论】:

  • 你在一个不是 80 的端口上通过 http 提供 html,抛出一个陈词滥调,你做错了。
  • 他遵循规范,我只是不喜欢生产系统在非标准端口上通过 http 提供纯 html。这是一种观点,但我敢打赌,这是一种足够普遍的观点,可以称之为最佳实践。

标签: asp.net url


【解决方案1】:
.Replace(".com", ".com:20055")

【讨论】:

  • 哈。是的,我可以这样做,但内部域并不总是以 .com 结尾,否则我会在心跳中做到这一点。 +1 为简单起见,考虑到我告诉你的内容,它会起作用。
  • 好吧,您总是可以使用正则表达式来确定域的结尾。 :) 有一个 Regex.Replace 你知道的!
【解决方案2】:

我现在无法访问 ASP 服务器或 Visual Studio 来获取详细信息,但我知道您可以从 Request.Url 对象中获取域名和其中的 URL 路径。快速搜索告诉我获取 internaldomain.com 部分是 Request.Url.Host。

因此,您只需将端口附加到此,然后将它们拼凑在一起。

所以,应该是这样的

scheme + "://" + host + ":" + port "/" + currentPath + "/" + appPath

正如我所说,现在无法检查细节,但我知道 Request 对象将让您访问所有这些部分。如果您要从一个端口到另一个端口,您可能必须存储在某个地方的端口。

【讨论】:

  • 我认为你是在正确的轨道上。我在堆栈溢出stackoverflow.com/questions/689678/… 中找到了答案我使用了 MartinHN 的解决方案(大约在页面的一半处)。我不认为它会起作用,但它会起作用。
猜你喜欢
  • 2014-02-09
  • 2016-07-18
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2018-01-31
  • 2014-07-18
  • 2011-07-04
相关资源
最近更新 更多