Uri.IdnHost Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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. wirdxn--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. oderfe80::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.