C# 获取顶级域的简单方法?

C# 获取顶级域的简单方法?,c#,asp.net,C#,Asp.net,我想从用户当前所在的站点名称中获取域扩展(至少我希望这样称呼它) 因此,从www.bbc.co.uk可以看到co.uk和 www.google.com=.com www.com 等等 尤其是那些双名的(比如co.uk)让我头疼 编辑 从评论中我了解到,co.uk不是顶级域名?这让生活更轻松! 编辑 标题中的新名称(顶级域)参见此问题 当然,.NET URI类也可以检索主机名。The.co.uk是.uk tld的.co子域。就dns的实际结构而言,这个问题没有意义。它被称为顶级域,然后是第一个子

我想从用户当前所在的站点名称中获取域扩展(至少我希望这样称呼它)

因此,从www.bbc.co.uk可以看到co.uk和 www.google.com=.com www.com

等等

尤其是那些双名的(比如co.uk)让我头疼

编辑 从评论中我了解到,co.uk不是顶级域名?这让生活更轻松! 编辑 标题中的新名称(顶级域)

参见此问题


当然,.NET URI类也可以检索主机名。

The.co.uk是.uk tld的.co子域。就dns的实际结构而言,这个问题没有意义。

它被称为顶级域,然后是第一个子域,不是每个人都使用它。这是因为第一个DNS确实反转了拆分列表上的条目,以更快地路由,因此它将解析为

uk -> co -> example -> www

它被称为顶级域名(tld),但对于BBC来说,这只是“uk”,而不是“co.uk”


您需要的不是标准,因此您需要一个表来检查“潜在”伪tld

mozilla的PublicSuffix项目就是解决方案。它是TLD的维护列表

您可以使用以下nuget包

示例

var domainParser = new DomainParser(new WebTldRuleProvider());

var domainName = domainParser.Get("sub.test.co.uk");
//domainName.Domain = "test";
//domainName.Hostname = "sub.test.co.uk";
//domainName.RegistrableDomain = "test.co.uk";
//domainName.SubDomain = "sub";
//domainName.TLD = "co.uk";

但这并不能真正回答问题,尤其是在co.uk的案例中。我一直认为.co.uk是“一”而不是一个子域名。在.uk中还有其他子域名,如.ac.uk,类似于.edu。“.”始终是分隔符。
var domainParser = new DomainParser(new WebTldRuleProvider());

var domainName = domainParser.Get("sub.test.co.uk");
//domainName.Domain = "test";
//domainName.Hostname = "sub.test.co.uk";
//domainName.RegistrableDomain = "test.co.uk";
//domainName.SubDomain = "sub";
//domainName.TLD = "co.uk";