Uri.CheckHostName()何时返回UriHostNameType.Basic而不是UriHostNameType.Dns或UriHostNameType.Unknown?

时间:2013-08-20 17:30:46

标签: c# mono

http://msdn.microsoft.com/en-us/library/system.urihostnametype.aspxhttp://msdn.microsoft.com/en-us/library/system.uri.checkhostname.aspx处的文档有点不清楚。

Uri.CheckHostName(string)返回UriHostNameType.Dns表示有效的DNS主机名,当字符串包含无效字符时返回UriHostNameType.Unknown,依此类推。在什么条件下这个方法会返回UriHostNameType.Basic

3 个答案:

答案 0 :(得分:6)

现在.NET Core是我们可以肯定知道的开源。

就像Mono一样,它永远不会返回UriHostNameType.Basic

Link to source code

答案 1 :(得分:4)

我想到我可以查看Mono源代码来回答我的问题。以下是https://github.com/mono/mono/blob/master/mcs/class/System/System/Uri.csCheckHostName方法:

    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.BasicUriBuilder 使用,当 DNS 主机名中至少有 1 个域标签以“-”(破折号)或“_”(下划线)。例如,“_caldavs._tcp.google.com”将返回 Uri

但是,UriHostNameType.Basic 似乎永远不会返回此值。对于上面相同的 DNS 主机名,它返回 Uri.CheckHostName(string)