如何在C#中提取根域?
www.google.co.in => google.co.in
google.co.in => google.co.in
coo.coo.coo.coo.com => coo.com
www.google.com => google.com
我是否必须将所有顶级域名硬编码到我的应用程序中?
有关此问题的每个主题都有我的代码:
string domainName = host.Split('.')[host.Split('.').Count() - 2] + "." +
host.Split('.')[host.Split('.').Count() - 1];
但它不适用于像google.co.uk这样的域名(因为它返回co.uk)
编辑:
到目前为止我发现的工作是对“http://whois.domaintools.com/www.domain.org”发出HTTP请求,该请求返回301响应代码,其中包含包含根域的URL。这对我来说是最可靠的解决方案。也许有另外一个免费的API来做这个?
答案 0 :(得分:3)
一般问题一点也不简单。构成有效域名的规则由控制每个顶级域名的权威机构(即.com,.uk,.au等)设定。
Mozilla有一项名为Public Suffix List的计划,其中包含所有顶级域名的当前已知公开后缀列表。该列表的格式使得一些相当简单的代码可以解释它并从给定的主机名中提取根域名。
列表本身可从https://publicsuffix.org/获得。在那里,您可以了解列表的格式,下载列表以及获取其他信息。请参阅Stack Overflow问题Get the subdomain from a URL,以获取许多不同语言(包括C#)实现的链接。