7

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

4

3 回答 3

6

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

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

链接到源代码

于 2015-07-19T20:08:22.937 回答
4

我突然想到,我可以检查 Mono 源代码来回答我的问题。这是CheckHostName来自https://github.com/mono/mono/blob/master/mcs/class/System/System/Uri.cs的方法:

    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根本没有使用。也许微软实现可以返回这个值?

于 2013-08-28T17:41:10.993 回答
0

UriHostNameType.BasicUriBuilderand使用Uri,当 DNS 主机名中至少有 1 个域标签以“-”(破折号)或“_”(下划线)开头时。例如,“_caldavs._tcp.google.com”将返回UriHostNameType.Basic.

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

于 2021-02-04T18:27:44.107 回答