C#中URL的顶级域名

Ber*_*nDK 12 c# asp.net string dns tld

我正在使用C#和ASP.NET.

我们在IIS 6.0服务器上收到很多"奇怪"的请求,我想按域记录和编目.

例如.我们收到一些奇怪的请求,比如:

http://www.poker.winner4ever.example.com/

http://www.hotgirls.example.com/

http://santaclaus.example.com/

http://m.example.com/

http://wap.example.com/

http://iphone.example.com/

后三者有点显而易见,但我想把它们整理成一个,因为我们的服务器上托管了"example.com".其余的不是,对不起:-)

所以我正在寻找一些如何从上面检索example.com的好主意.其次,我想将m.,wap.,iphone等匹配到一个组中,但这可能只是在移动快捷键列表中快速查找.我可以手动编码此列表作为开始.

但是regexp这里的答案还是纯粹的字符串操作最简单的方法?我在考虑将URL字符串"拆分"为"." 以及项目[0]和项目[1]的查找...

有任何想法吗?

Phi*_*unt 9

以下代码使用Uri该类获取主机名,然后通过Uri.Host在句点上拆分主机名来获取第二级主机(examplecompany.com).

var uri = new Uri("http://www.poker.winner4ever.examplecompany.com/");
var splitHostName = uri.Host.Split('.');
if (splitHostName.Length >= 2)
{
    var secondLevelHostName = splitHostName[splitHostName.Length - 2] + "." +
                              splitHostName[splitHostName.Length - 1];
}
Run Code Online (Sandbox Code Playgroud)

  • 这可能适合OP的需求,但并不适用于所有域.例如,http://www.google.co.uk/或http://www.bbc.co.uk/的主机名将以*"co.uk"*的形式给出. (7认同)
  • @LukeH:非常好的观点。我只是考虑了 OP 的需求,国家代码 TLD 甚至没有出现在我的脑海中:-/ (2认同)

Gar*_*rey 6

可能存在一些示例,其返回除所需内容之外的内容,但国家代码是唯一的2个字符,并且它们可能具有或不具有通常使用的短二级(2或3个字符).因此,在大多数情况下,这将为您提供所需的内容:

string GetRootDomain(string host)
{
    string[] domains = host.Split('.');

    if (domains.Length >= 3)
    {
        int c = domains.Length;
        // handle international country code TLDs 
        // www.amazon.co.uk => amazon.co.uk
        if (domains[c - 1].Length < 3 && domains[c - 2].Length <= 3)
            return string.Join(".", domains, c - 3, 3);
        else
            return string.Join(".", domains, c - 2, 2);
    }
    else
        return host;
}
Run Code Online (Sandbox Code Playgroud)


liv*_*ve2 5

您可以使用以下nuget Nager.PublicSuffix软件包。

裸体

PM> Install-Package Nager.PublicSuffix
Run Code Online (Sandbox Code Playgroud)

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";
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一正确的做法;该软件包下载并缓存 https://publicsuffix.org/ 维护和策划的后缀列表,该列表与浏览器供应商使用的列表相同。 (3认同)