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

例如:

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

将全部转换为:

 google.co.uk 

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

尝试使用此代码

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

提取域名很容易

UriBuilder类对 URL进行UriBuilder处理,并处理许多边缘情况,例如缺少方案。 这样可以轻松提取域名。 例如,这些都给你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由注册商管理,而google.co.uk由Google管理。

为了让您了解问题,这里是一个不完整的域名后缀列表,其中包括迄今为止近7100个条目。 值得注意的是,哪个部分甚至不一致:

 URL您想要的域
 --------------------- -------------------
 http://www.crews.aero crews.aero
 http://www.crew.aero www.crew.aero

最好的方法是Google本身为Chrome的omnibar做的事情 :获取(不完整的)域后缀列表,暂时缓存它,并将域名与域后缀列表进行比较。 您可以自己查看结果:在Chrome omnibar中键入“crews.aero”,它将被视为URL,或键入“crew.aero”,它将被视为搜索。