Ci-dessous est un code qui donnera juste le SLD plus gTLD ou ccTLD extension (note de l'exception ci-dessous). Je ne se soucient pas de DNS.
La théorie est la suivante:
- Rien de moins de 3 jetons reste comme, par exemple, est "localhost", "domain.com" sinon: Le dernier jeton doit être un gTLD ou ccTLD extension.
- L'avant-dernier jeton est considéré comme faisant partie de l'extension si elle est de longueur < 3 OU s'il est inclus dans une liste d'exceptions.
- Enfin le jeton avant que l'un est considéré comme le SLD. Tout à l'avant qui est considéré comme un sous-domaine ou à un qualificatif, par exemple, Www.
Comme pour le code, short & sweet:
private static string GetDomainName(string url)
{
string domain = new Uri(url).DnsSafeHost.ToLower();
var tokens = domain.Split('.');
if (tokens.Length > 2)
{
//Add only second level exceptions to the < 3 rule here
string[] exceptions = { "info", "firm", "name", "com", "biz", "gen", "ltd", "web", "net", "pro", "org" };
var validTokens = 2 + ((tokens[tokens.Length - 2].Length < 3 || exceptions.Contains(tokens[tokens.Length - 2])) ? 1 : 0);
domain = string.Join(".", tokens, tokens.Length - validTokens, validTokens);
}
return domain;
}
L'exception évidente est que ce ne sera pas traiter avec le 2-lettre de noms de domaine. Donc, si vous êtes assez chanceux pour posséder ab.com vous aurez besoin d'adapter le code légèrement. Pour nous, simples mortels, ce code permet de couvrir à peu près tous les gTLD et les ccTLD, moins quelques très exotiques.