Uri.IdnHost Propriété

Définition

Obtient le nom de domaine international conforme RFC 3490 de l’hôte, en utilisant Punycode comme il convient. Cette chaîne, après avoir été déchaînée si nécessaire, est sûre à utiliser pour la résolution DNS.

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

Valeur de propriété

Nom d’hôte, mis en forme avec Punycode en fonction de la norme IDN.

Exceptions

Cette instance représente un URI relatif et cette propriété est valide uniquement pour les URI absolus.

Exemples

L’exemple suivant montre comment Host et IdnHost différer entre les entrées DNS, IDN, IPv4 et 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

Remarques

Cette propriété est fournie pour l’utilisation de protocoles de mise en réseau de niveau inférieur qui nécessitent le nom de domaine sous forme Punycode. Si votre code ne nécessite pas ce format spécifique, utilisez Host le nom d’hôte.

La valeur retournée par cette propriété dépend du type d’hôte :

  • Pour les noms d’hôtes DNS : pour les noms de domaine internationaux valides, les caractères non ASCII sont codés en punycode (par exemple, münchen.de devient xn--mnchen-3ya.de). Les noms d’hôte qui ne sont pas des IDN valides peuvent être retournés as-is et inclure des caractères non ASCII.
  • Pour les adresses IPv6 : retourne l’adresse sans crochets environnants et inclut l’ID de zone (étendue) si l’une des adresses a été spécifiée (par exemple, ::1 ou fe80::1%18).
  • Pour les adresses IPv4 : retourne la notation décimale en pointillés (par exemple, 192.168.1.1).

IdnHost est l’alternative préférée à la propriété héritée DnsSafeHost , car son comportement ne dépend pas des paramètres app.config et il est conçu pour produire une valeur adaptée à la résolution DNS. Notez que pour les résultats IPv6 qui incluent un ID de zone, les appelants peuvent toujours avoir besoin de supprimer l’ID de zone avant de passer la valeur aux API qui ne l’acceptent pas.

Si vous avez utilisé une chaîne d’échappement pour construire cette instance (par exemple, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), IdnHost retourne une chaîne d’échappement. Vous devez annuler l’échappement d’une chaîne retournée par IdnHost avant d’utiliser cette chaîne pour la résolution DNS. N’oubliez pas que si vous avez utilisé une chaîne non exécutée non valide pour construire cette instance (par exemple, « http://[fe80 ::200:39ff :fe36:1a2d%4]/temp/example.htm»), idnHost retourne une chaîne non échauffée.

S’applique à