A continuación se muestra un código que le dará sólo el SLD además de gTLD o ccTLD extensión (tenga en cuenta la excepción abajo). No me importa el DNS.
La teoría es la siguiente:
- cualquier cosa bajo 3 tokens permanece como es por ejemplo "localhost", "domain.com"; de lo contrario: el último token debe ser una extensión de gTLD o ccTLD.
- La penúltima ficha se considera parte de la extensión si su longitud es < 3 O si está incluida en una lista de excepciones.
- Finalmente, el token anterior a ese se considera SLD. Todo lo anterior se considera un subdominio o un calificador de host, p. Www.
En cuanto al código, corta & dulce:
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;
}
La excepción obvia es que esto no va a hacer frente a los nombres de dominio de 2 letras. Por lo tanto, si tienes la suerte de ser propietario de ab.com, deberás adaptar el código un poco. Para nosotros simples mortales, este código cubrirá casi todos los gTLD y ccTLD, menos algunos muy exóticos.
Lo que debería ser el resultado de 'foo.bar.com'? ¿Qué hay de 'foo.co.uk'? ¿Qué hay de 'foo.bar.museum'? –
Hola Mark ... básicamente busco el nombre de dominio puro ... así que si comienza con ww3.test.co.uk entonces debería devolver test.co.uk ya que este es el dominio puro ... Entonces en su ejemplo, foo.co.uk debe devolver foo.co.uk ya que este es el dominio puro .... y foo.bar.museum devolverá bar.museum pero. el museo no es un dominio de nivel superior válido como .com, co.uk, .us, etc. ¿es eso? ... –
.museum, .mobi y .travel son nombres de dominio de nivel superior perfectamente válidos. ¿Podría aclarar por qué ww3 no es parte del nombre de dominio "puro", mientras que foo es? ¿Cuál es * la * definición de un nombre de dominio puro? –