窗户 主机文件 允许您将 IP 关联到 主机名 比普通的互联网域名具有更大的自由度。我想创建一个函数来确定给定名称是否是有效的“主机”文件域名。

基于 这个答案 并尝试什么有效,什么无效,我想出了这个功能:

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;
}

它还有一个好处是它应该可以使用 Unicode 名称(基本正则表达式会失败)。

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

更新: :正如建议的 账单, , 这 Uri.检查主机名 方法几乎可以满足我的要求,但它不允许使用 Windows 允许在“hosts”文件中使用的主机名,例如“-test”。我会对“-”部分进行特殊处理,但我担心还有更多特殊情况。

有帮助吗?

解决方案

如何有关系统。 Uri.CheckHostName()方法?

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

为什么做这项工作自己呢?

其他提示

这些方法,你得到一些回应,即使域名是假像“fasdfasdfasd.com”。

是不可靠

,最好的方法是发送一个WebResponse的,并等待来自该域的响应。下面是完整的代码和该方法的说明(长的代码段,从而不能复制粘贴在这里)。

http://www.dotnetfunda.com/物品/显示/ 1072 /验证网域名称功能于ASPNET

由于

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top