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 возвращает неискаченную строку.