Il modo migliore per determinare se un nome di dominio sarebbe una valida in un file “hosts”?

StackOverflow https://stackoverflow.com/questions/967516

Domanda

consente di associare un IP ad un nome host che ha di gran lunga maggiore libertà di una normale nome di dominio Internet. Mi piacerebbe creare una funzione che determina se un determinato nome sarebbe un nome di dominio di file "host" valido.

In base a questo rispondere e sperimentazione di ciò che funziona e non lo fa, mi si avvicinò con questa funzione:

private static bool IsValidDomainName(string domain)
{
    if (String.IsNullOrEmpty(domain) || domain.Length > 255)
    {
        return false;
    }

    Uri uri;

    if (!Uri.TryCreate("http://" + domain, UriKind.Absolute, out uri))
    {
        return false;
    }

    if (!String.Equals(uri.Host, domain, StringComparison.OrdinalIgnoreCase) || !uri.IsWellFormedOriginalString())
    {
        return false;
    }

    foreach (string part in uri.Host.Split('.'))
    {
        if (part.Length > 63)
        {
            return false;
        }
    }

    return true;
}

Essa ha anche il vantaggio che dovrebbe funzionare con i nomi Unicode (dove una regex base fallirebbe).

C'è un / modo migliore più elegante per fare questo?

Aggiorna : Come suggerito da Bill , il metodo Uri.CheckHostName quasi fa quello che voglio, ma non consente di accoglienza nomi come "-test" che Windows permette in un file "hosts". Vorrei caso speciale il "-" parte, ma mi riguarda ci sono casi speciali.

È stato utile?

Soluzione

Come circa il . Uri.CheckHostName () metodo?

private static bool IsValidDomainName(string name)
{
    return Uri.CheckHostName(name) != UriHostNameType.Unknown;
}

Perché il lavoro da soli?

Altri suggerimenti

Questi metodi non sono affidabili come si ottiene qualche risposta anche se il nome di dominio è falso come "fasdfasdfasd.com".

Il modo migliore è quello di inviare un WebResponse e attendere la risposta dal dominio. Ecco il codice completo e le spiegazioni di questo processo (codice lungo frammento di così non copiare-incollare qui).

http://www.dotnetfunda.com/ articoli / mostra / 1072 / validazione-domain-name-in-ASPNET

Grazie

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top