确定域名在“hosts”文件中是否有效的最佳方法?
-
12-09-2019 - |
题
窗户 主机文件 允许您将 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
由于
不隶属于 StackOverflow