c# – 确定域名在“主机”文件中是否有效的最佳方法?

Windows Hosts file允许您将IP与一个比正常Internet域名大得多的 host name相关联.我想创建一个函数来确定给定的名称是否是一个有效的“主机”文件域名.

基于this answer和实验的工作,没有,我想出了这个功能:

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名称(其中基本的正则表达式将失败).

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

更新:根据Bill的建议,Uri.CheckHostName方法几乎完成了我想要的,但它不允许像“-test”这样的主机名在“hosts”文件中允许.我会特别处理“ – ”部分,但我担心有更多的特殊情况.

解决方法

System.Uri.CheckHostName()方法怎么样?
private static bool IsValidDomainName(string name)
{
    return Uri.CheckHostName(name) != UriHostNameType.Unknown;
}

为什么自己做这个工作?

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...