Uri.IdnHost Propiedad

Definición

Obtiene el nombre de dominio internacional compatible con RFC 3490 del host mediante Punycode según corresponda. Esta cadena, después de ser sin escape si es necesario, es segura de usar para la resolución 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 propiedad

Nombre de host, con formato Punycode según el estándar IDN.

Excepciones

Esta instancia representa un URI relativo y esta propiedad solo es válida para los URI absolutos.

Ejemplos

En el ejemplo siguiente se muestra cómo Host y IdnHost difieren entre las 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

Comentarios

Esta propiedad se proporciona para el uso de protocolos de red de nivel inferior que requieren el nombre de dominio en el formulario Punycode. Si el código no requiere ese formato específico, use Host para el nombre de host.

El valor devuelto por esta propiedad depende del tipo de host:

  • En el caso de los nombres de host DNS: para los nombres de dominio internacionales válidos, los caracteres que no son ASCII están codificados con puntuación (por ejemplo, münchen.de se convierten en xn--mnchen-3ya.de). Es posible que se devuelvan nombres de host que no son IDN válidos as-is e incluyan caracteres que no sean ASCII.
  • Para las direcciones IPv6: devuelve la dirección sin los corchetes circundantes e incluye el identificador de zona (ámbito) si se especificó uno (por ejemplo, ::1 o fe80::1%18).
  • Para las direcciones IPv4: devuelve la notación decimal con puntos (por ejemplo, 192.168.1.1).

IdnHost es la alternativa preferida a la propiedad heredada DnsSafeHost , ya que su comportamiento no depende de app.config configuración y está diseñado para generar un valor adecuado para la resolución DNS. Tenga en cuenta que para los resultados de IPv6 que incluyen un identificador de zona, es posible que los autores de llamadas tengan que quitar el identificador de zona antes de pasar el valor a las API que no lo aceptan.

Si usó una cadena de escape para construir esta instancia (por ejemplo, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), IdnHost devuelve una cadena de escape. Debe anular el escape de cualquier cadena de escape de IdnHost antes de usar esa cadena para la resolución DNS. Tenga en cuenta que si usó una cadena no válida sincaptura para construir esta instancia (por ejemplo, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), IdnHost devuelve una cadena sin escape.

Se aplica a