【发布时间】:2012-07-06 13:48:07
【问题描述】:
例如:
http://www.google.co.uk
www.google.co.uk
google.co.uk
将全部转换为:
google.co.uk
我本来希望使用 System.Uri 类,但这似乎只接受带有方案的 url。
【问题讨论】:
-
然后添加一个方案,如果还没有的话。
-
那么添加方案,然后将其归一化?
例如:
http://www.google.co.uk
www.google.co.uk
google.co.uk
将全部转换为:
google.co.uk
我本来希望使用 System.Uri 类,但这似乎只接受带有方案的 url。
【问题讨论】:
UriBuilder class 规范化 URL 并处理许多边缘情况,例如缺少方案。这使得提取域名变得容易。比如这些都给你www.google.co.uk:
new UriBuilder("www.google.co.uk").Host
new UriBuilder("http://www.google.co.uk").Host
new UriBuilder("ftp://www.google.co.uk:21/some/path").Host
www. 很难这个问题看起来很简单,但事实并非如此。您无法可靠地删除像 www 这样的子域,因为没有真正的区别。域是 www.google.co.uk,包括www。 co.uk 没有什么特别之处,它使 google 成为域的一部分,而 www 不是它的一部分——恰好co.uk 由注册商管理,google.co.uk 由 Google 管理。
为了让您了解这个问题,这里有一个incomplete list of domain suffixes,到目前为止包含近 7100 个条目。值得注意的是,哪个部分甚至不一致:
URL你想要的域 --------------------------------- ----- http://www.crews.aero 船员.aero http://www.crew.aero www.crew.aero最好的方法是what Google itself does for Chrome's omnibar:获取(incomplete) list of domain suffixes,临时缓存它,然后将域名与域后缀列表进行比较。您可以自己查看结果:在 Chrome 多功能栏中输入“crews.aero”,它将被视为 URL,或输入“crew.aero”,它将被视为搜索。
【讨论】:
试试这段代码
var url = "";
if (! url.Contains("://"))
{
Url = "http://" + url;
}
var result = new Uri(url).Host;
【讨论】: