Uri.IdnHost Свойство

Определение

Возвращает международное доменное имя узла RFC 3490, используя Punycode соответствующим образом. Эта строка после того, как не будет отключена при необходимости, безопасно использовать для разрешения DNS.

public:
 property System::String ^ IdnHost { System::String ^ get(); };
public string IdnHost { get; }
member this.IdnHost : string
Public ReadOnly Property IdnHost As String

Значение свойства

Имя узла отформатировано с помощью Punycode в соответствии со стандартом IDN.

Исключения

Этот экземпляр представляет относительный URI, и это свойство допустимо только для абсолютных URI.

Примеры

В следующем примере показано, как Host и IdnHost отличаться между входными данными DNS, IDN, IPv4 и IPv6:

// Demonstrate differences between Host, IdnHost, and DnsSafeHost.

// Example 1: Regular hostname (ASCII).
Console.WriteLine("Example 1: Regular ASCII hostname");
Uri uri1 = new Uri("http://www.contoso.com:8080/path");
Console.WriteLine($"  Host:        {uri1.Host}");        // www.contoso.com
Console.WriteLine($"  IdnHost:     {uri1.IdnHost}");     // www.contoso.com
Console.WriteLine($"  DnsSafeHost: {uri1.DnsSafeHost}"); // www.contoso.com
Console.WriteLine();

// Example 2: International domain name (non-ASCII).
Console.WriteLine("Example 2: International domain name");
Uri uri2 = new Uri("http://münchen.de/path");
Console.WriteLine($"  Host:        {uri2.Host}");        // münchen.de (original)
Console.WriteLine($"  IdnHost:     {uri2.IdnHost}");     // xn--mnchen-3ya.de (punycode)
Console.WriteLine($"  DnsSafeHost: {uri2.DnsSafeHost}"); // münchen.de or xn--mnchen-3ya.de, depending on configuration.
Console.WriteLine();

// Example 3: International domain name already in punycode (encoded) form.
Console.WriteLine("Example 3: Already-encoded international domain name");
Uri uri2Encoded = new Uri("http://xn--mnchen-3ya.de/path");
Console.WriteLine($"  Host:        {uri2Encoded.Host}");        // xn--mnchen-3ya.de (as provided)
Console.WriteLine($"  IdnHost:     {uri2Encoded.IdnHost}");     // xn--mnchen-3ya.de (already punycode)
Console.WriteLine($"  DnsSafeHost: {uri2Encoded.DnsSafeHost}"); // xn--mnchen-3ya.de
Console.WriteLine();

// Example 4: IPv6 address without zone ID.
Console.WriteLine("Example 4: IPv6 address without zone ID");
Uri uri3 = new Uri("http://[::1]:8080/path");
Console.WriteLine($"  Host:        {uri3.Host}");        // [::1] (with brackets)
Console.WriteLine($"  IdnHost:     {uri3.IdnHost}");     // ::1 (without brackets)
Console.WriteLine($"  DnsSafeHost: {uri3.DnsSafeHost}"); // ::1 (without brackets)
Console.WriteLine();

// Example 5: IPv6 link-local address with zone ID.
Console.WriteLine("Example 5: IPv6 link-local address with zone ID");
Uri uri4 = new Uri("http://[fe80::1%10]:8080/path");
Console.WriteLine($"  Host:        {uri4.Host}");        // [fe80::1] (with brackets, no zone ID)
Console.WriteLine($"  IdnHost:     {uri4.IdnHost}");     // fe80::1%10 (without brackets, with zone ID)
Console.WriteLine($"  DnsSafeHost: {uri4.DnsSafeHost}"); // fe80::1%10 (without brackets, with zone ID)
Console.WriteLine();

// Example 6: IPv4 address.
Console.WriteLine("Example 6: IPv4 address");
Uri uri5 = new Uri("http://192.168.1.1:8080/path");
Console.WriteLine($"  Host:        {uri5.Host}");        // 192.168.1.1
Console.WriteLine($"  IdnHost:     {uri5.IdnHost}");     // 192.168.1.1
Console.WriteLine($"  DnsSafeHost: {uri5.DnsSafeHost}"); // 192.168.1.1

Комментарии

Это свойство предоставляется для использования сетевых протоколов нижнего уровня, требующих доменного имени в форме Punycode. Если код не требует этого конкретного формата, используйте Host для имени узла.

Значение, возвращаемое этим свойством, зависит от типа узла:

  • Для имен узлов DNS: для допустимых международных доменных имен символы, отличные от ASCII, кодируются в punycode (например, münchen.de становится xn--mnchen-3ya.de). Имена узлов, которые не являются допустимыми идентификаторами, могут быть возвращены as-is и включать символы, отличные от ASCII.
  • Для IPv6-адресов: возвращает адрес без окружающих квадратных скобок и включает идентификатор зоны (область), если он указан (например, ::1 или fe80::1%18).
  • Для адресов IPv4: возвращает нотацию с точками с десятичной запятой (например, 192.168.1.1).

IdnHost является предпочтительной альтернативой устаревшему DnsSafeHost свойству, так как его поведение не зависит от параметров app.config и предназначено для создания значения, подходящего для разрешения DNS. Обратите внимание, что для результатов IPv6, включающих идентификатор зоны, вызывающим службам может по-прежнему потребоваться удалить идентификатор зоны перед передачей значения в API, которые не принимают его.

Если для создания этого экземпляра используется escape-строка (например, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), то IdnHost возвращает escape-строку. Перед использованием этой строки для разрешения DNS следует отменить любой escape-код, возвращаемый из IdnHost. Помните, что если для создания этого экземпляра используется недопустимая строка (например, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), то IdnHost возвращает неискаченную строку.

Применяется к