Di seguito è riportato un codice che darà solo lo SLD più gTLD o ccTLD estensione (si noti l'eccezione di seguito). Non mi interessa il DNS.
La teoria è la seguente:
- nulla sotto 3 gettoni rimane come è ad esempio "Localhost", "domain.com", altrimenti: l'ultimo token deve essere un'estensione gTLD o ccTLD.
- Il token penultima è considerato parte dell'estensione se si tratta di lunghezza < 3 O se incluso in un elenco di eccezioni.
- Infine il token prima che uno è considerato lo SLD. Qualsiasi cosa prima è considerata un sottodominio o un qualificatore di host, ad es. Www.
Per quanto riguarda il codice, breve & dolce:
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'eccezione ovvia è che questo non sarà che fare con i nomi di dominio 2 lettere. Quindi se sei abbastanza fortunato da possedere ab.com dovrai adattare leggermente il codice. Per noi comuni mortali questo codice coprirà quasi tutti i gTLD e ccTLD, meno un paio di quelli molto esotiche.
Quale dovrebbe essere la conseguenza essere per 'foo.bar.com'? Che mi dici di "foo.co.uk"? Che mi dici di "foo.bar.museum"? –
Ciao Mark ... fondamentalmente sto seguendo il nome di dominio puro ... quindi se inizia con ww3.test.co.uk allora dovrebbe restituire test.co.uk dato che questo è il dominio puro .... Quindi nel tuo esempio foo.co.uk dovrebbe restituire foo.co.uk dato che questo è il dominio puro .... e foo.bar.museum restituirebbe bar.museum ma. il museo non è un dominio di primo livello valido come .com, co.uk, .us ecc. è ??? ... –
.museum, .mobi e .travel sono nomi di dominio di primo livello perfettamente validi. Potresti chiarire, per favore, perché ww3 non fa parte del nome di dominio 'puro', mentre è foo? Qual è la * tua * definizione di un nome di dominio puro? –