规范化URI以仅提取域名的最佳方法是什么?

时间:2012-07-06 13:48:07

标签: c# .net uri

例如:

http://www.google.co.uk
www.google.co.uk
google.co.uk

将全部转换为:

google.co.uk

我本来希望使用System.Uri类,但这似乎只接受带有方案的网址。

2 个答案:

答案 0 :(得分:6)

轻松提取域名

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,包括wwwco.uk使google成为域的一部分且www不属于域 - 没有什么特别之处 - co.uk由注册商管理,而{{1}由Google管理。

为了让您了解问题,这里有incomplete list of domain suffixes,其中包含近7100个条目。值得注意的是,哪一部分甚至不一致:

URL                     the domain you want
---------------------   -------------------
http://www.crews.aero   crews.aero
http://www.crew.aero    www.crew.aero

最好的方法是what Google itself does for Chrome's omnibar:获取(incomplete) list of domain suffixes,暂时缓存它,并将域名与域后缀列表进行比较。您可以自己查看结果:在Chrome omnibar中键入“crews.aero”,它将被视为URL,或者键入“crew.aero”,它将被视为搜索。

答案 1 :(得分:0)

尝试使用此代码

var url = "";
if (! url.Contains("://"))
{
        Url = "http://" + url;
}

var result = new Uri(url).Host;