Uri.IdnHost Propriedade

Definição

Obtém o nome de domínio internacional compatível com RFC 3490 do host, usando Punycode conforme apropriado. Esta cadeia, depois de ser desbloqueada se necessário, é segura para usar na resolução DNS.

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

Valor de Propriedade

O nome de anfitrião, formatado com Punycode de acordo com o padrão IDN.

Exceções

Esta instância representa um URI relativo, e esta propriedade é válida apenas para URIs absolutos.

Exemplos

O exemplo seguinte mostra como Host e IdnHost diferem entre entradas DNS, IDN, IPv4 e 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

Observações

Esta propriedade é fornecida para a utilização de protocolos de rede de nível inferior que requerem o nome de domínio em formato Punycode. Se o teu código não precisar desse formato específico, usa Host como nome de host.

O valor devolvido por esta propriedade depende do tipo de host:

  • Para nomes de host DNS: Para nomes de domínio internacionais válidos, caracteres não ASCII são codificados em punycode (por exemplo, münchen.de torna-se xn--mnchen-3ya.de). Nomes de host que não são IDNs válidos podem ser devolvidos as-is e incluir caracteres não ASCII.
  • Para endereços IPv6: Devolve o endereço sem os colchetes circundantes, e inclui o ID da zona (escopo) se um foi especificado (por exemplo, ::1 ou fe80::1%18).
  • Para endereços IPv4: Devolve a notação decimal pontuada (por exemplo, 192.168.1.1).

IdnHost é a alternativa preferida à propriedade legada DnsSafeHost , porque o seu comportamento não depende das definiçõesapp.config e foi concebida para produzir um valor adequado à resolução DNS. Note que, para resultados IPv6 que incluem um ID de zona, os chamadores podem ainda ter de remover o ID da zona antes de passar o valor para APIs que não o aceitam.

Se usaste uma cadeia escapada para construir esta instância (por exemplo, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), então o IdnHost devolve uma cadeia escapada. Deves desfazer qualquer string escapado devolvido do IdnHost antes de usar essa string para resolução DNS. Tenha em atenção que, se usou uma string inválida sem escape para construir esta instância (por exemplo, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), então o IdnHost devolve uma string sem escape.

Aplica-se a