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

jaf*_*ffa 3 .net c# uri

例如:

http://www.google.co.uk
www.google.co.uk
google.co.uk
Run Code Online (Sandbox Code Playgroud)

将全部转换为:

google.co.uk
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*ild 6

提取域名很容易

UriBuilder正常化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
Run Code Online (Sandbox Code Playgroud)

......但是去除www.很难

问题似乎很容易,但事实并非如此.您无法可靠地删除子域,www因为没有真正的区别.域名 www.google.co.uk,包括www.没有什么特别的,co.uk它构成google了域的一部分,而www不是它的一部分 - 它只是co.uk由注册商google.co.uk管理,由Google管理.

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

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

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