确定域名在"主机"文件中是否有效的最佳方法是什么?

Jef*_*ser 13 c# validation domain-name hosts-file

Windows Hosts文件允许您将IP与主机名相关联,该主机名具有比普通Internet域名更大的自由度.我想创建一个函数来确定给定的名称是否是有效的"主机"文件域名.

根据这个有效和无效的答案和实验,我想出了这个功能:

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

它还有一个好处,它应该使用Unicode名称(基本正则表达式失败).

有没有更好/更优雅的方式来做到这一点?

更新:正如Bill所建议的那样,Uri.CheckHostName方法几乎可以满足我的需求,但它不允许Windows允许在"hosts"文件中使用"-test"等主机名.我会特别注意" - "部分,但我担心还有更多特殊情况.

Bil*_*ill 33

怎么样System.Uri.CheckHostName()方法?

private static bool IsValidDomainName(string name)
{
    return Uri.CheckHostName(name) != UriHostNameType.Unknown;
}
Run Code Online (Sandbox Code Playgroud)

为什么要自己工作?

  • 请注意,即使传递null或空字符串也会返回正确的答案. (5认同)