http://msdn.microsoft.com/en-us/library/system.urihostnametype.aspx和http://msdn.microsoft.com/en-us/library/system.uri.checkhostname.aspx处的文档有点不清楚。
Uri.CheckHostName(string)
返回UriHostNameType.Dns
表示有效的DNS主机名,当字符串包含无效字符时返回UriHostNameType.Unknown
,依此类推。在什么条件下这个方法会返回UriHostNameType.Basic
?
答案 0 :(得分:6)
答案 1 :(得分:4)
我想到我可以查看Mono源代码来回答我的问题。以下是https://github.com/mono/mono/blob/master/mcs/class/System/System/Uri.cs的CheckHostName
方法:
public static UriHostNameType CheckHostName (string name)
{
if (name == null || name.Length == 0)
return UriHostNameType.Unknown;
if (IsIPv4Address (name))
return UriHostNameType.IPv4;
if (IsDomainAddress (name))
return UriHostNameType.Dns;
IPv6Address addr;
if (IPv6Address.TryParse (name, out addr))
return UriHostNameType.IPv6;
return UriHostNameType.Unknown;
}
似乎根本没有使用UriHostNameType.Basic
。也许Microsoft实现可以返回这个值?
答案 2 :(得分:0)
def error_callback(retry_state):
# error handler
if isinstance(retry_state._exception(ZeroDivisionError)):
print("Can't handle it")
else:
print("Handled")
@retry(retry_error_callback=error_callback):
def zero_division():
a = 1
b = 0
a/b
由 UriHostNameType.Basic
和 UriBuilder
使用,当 DNS 主机名中至少有 1 个域标签以“-”(破折号)或“_”(下划线)。例如,“_caldavs._tcp.google.com”将返回 Uri
。
但是,UriHostNameType.Basic
似乎永远不会返回此值。对于上面相同的 DNS 主机名,它返回 Uri.CheckHostName(string)
。