Uri.IdnHost Eigenschaft

Definition

Ruft den RFC 3490-kompatiblen internationalen Domänennamen des Hosts ab, wobei Punycode entsprechend verwendet wird. Diese Zeichenfolge, nachdem sie bei Bedarf nicht gescapet wurde, ist sicher für die DNS-Auflösung zu verwenden.

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

Eigenschaftswert

Der Hostname, formatiert mit Punycode gemäß dem IDN-Standard.

Ausnahmen

Diese Instanz stellt einen relativen URI dar, und diese Eigenschaft ist nur für absolute URIs gültig.

Beispiele

Das folgende Beispiel zeigt, wie Host und IdnHost unterschiedlich sich dns-, IDN-, IPv4- und IPv6-Eingaben unterscheiden:

// 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

Hinweise

Diese Eigenschaft wird für die Verwendung von Netzwerkprotokollen auf niedrigerer Ebene bereitgestellt, die den Domänennamen in Punycode-Form erfordern. Wenn ihr Code dieses spezifische Format nicht erfordert, verwenden Sie Host dies für den Hostnamen.

Der von dieser Eigenschaft zurückgegebene Wert hängt vom Hosttyp ab:

  • Für DNS-Hostnamen: Bei gültigen internationalen Domänennamen werden Nicht-ASCII-Zeichen punycodecodiert (z. B münchen.de . wird xn--mnchen-3ya.de). Hostnamen, die keine gültigen IDNs sind, werden möglicherweise as-is zurückgegeben und enthalten Nicht-ASCII-Zeichen.
  • Für IPv6-Adressen: Gibt die Adresse ohne die umgebende Klammern zurück und enthält die Zonen-ID (Bereich), wenn eine angegeben wurde (z ::1 . B. oder fe80::1%18).
  • Für IPv4-Adressen: Gibt die punktierte Dezimalnotation (z. B 192.168.1.1. ) zurück.

IdnHost ist die bevorzugte Alternative zu der legacy-Eigenschaft DnsSafeHost , da ihr Verhalten nicht von app.config Einstellungen abhängt und darauf ausgelegt ist, einen Wert zu erzeugen, der für die DNS-Auflösung geeignet ist. Beachten Sie, dass für IPv6-Ergebnisse, die eine Zonen-ID enthalten, Aufrufer die Zonen-ID möglicherweise dennoch entfernen müssen, bevor sie an APIs übergeben werden, die ihn nicht akzeptieren.

Wenn Sie zum Erstellen dieser Instanz eine Escapezeichenfolge verwendet haben (z "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm". B. ), gibt IdnHost eine Escapezeichenfolge zurück. Sie sollten alle escaped-Zeichenfolgen, die von IdnHost zurückgegeben werden, aufheben, bevor Sie diese Zeichenfolge für die DNS-Auflösung verwenden. Beachten Sie, dass, wenn Sie zum Erstellen dieser Instanz eine ungültige unescaped-Zeichenfolge verwendet haben (z. B. "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), dann gibt IdnHost eine nicht dargestellte Zeichenfolge zurück.

Gilt für: