【问题标题】:Strip protocol and subdomain from a URL从 URL 中去除协议和子域
【发布时间】:2013-09-05 19:05:59
【问题描述】:

我使用以下代码从 URL 中删除 http://www.dev.

Uri uri = new Uri(this.Referrer);
    if (uri != null )
        return uri.GetLeftPart(UriPartial.Authority).Replace("http://dev.", "").Replace("http://www.", "").Replace("http://", "");
    else
        return null;

我不喜欢我依赖.Replace() 函数。在我意识到this.Referrer 没有子域之前,我遇到了一个错误很长一段时间。

有没有更优雅的方法来做到这一点?

【问题讨论】:

  • 类似但并不真正适用。
  • 当然这个问题也没有很好的表述,因为即使所谓的顶级域仍然是根域.(empty string) 的子域。要可靠地做到这一点,需要有一个顶级域列表,然后只在其以下一个域级别。
  • 硬编码列表...我建议不要这样做,这是一种很大的代码气味并且不必要地臃肿。
  • 它不一定是硬编码列表,请随时从 IANA 获取顶级域 - data.iana.org/TLD/tlds-alpha-by-domain.txt

标签: c# url


【解决方案1】:

您可以尝试使用这样的正则表达式:

http:\/\/(.*?)[.?]|http:\/\/

而不是执行多次替换。这将捕获您遇到的任何其他子域。我不知道另一种方法可以实现这一目标。

这实际上并没有尽可能短,但我想让它保持可读性。

【讨论】:

  • 不要忘记为 HTTPS 等进行调整。
猜你喜欢
  • 2019-09-10
  • 2018-03-04
  • 2011-10-19
  • 2015-12-14
相关资源
最近更新 更多