Uri.IdnHost Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera zgodną z standardem RFC 3490 międzynarodową nazwę domeny hosta przy użyciu narzędzia Punycode zgodnie z potrzebami. Ten ciąg, po usunięciu pejzażu w razie potrzeby, jest bezpieczny do użycia na potrzeby rozpoznawania nazw DNS.
public:
property System::String ^ IdnHost { System::String ^ get(); };
public string IdnHost { get; }
member this.IdnHost : string
Public ReadOnly Property IdnHost As String
Wartość właściwości
Nazwa hosta, sformatowana za pomocą punycode zgodnie ze standardem IDN.
Wyjątki
To wystąpienie reprezentuje względny identyfikator URI, a ta właściwość jest prawidłowa tylko dla bezwzględnych identyfikatorów URI.
Przykłady
W poniższym przykładzie pokazano, jak Host i IdnHost różni się między danymi wejściowymi DNS, IDN, IPv4 i 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
Uwagi
Ta właściwość jest udostępniana do korzystania z protokołów sieciowych niższego poziomu, które wymagają nazwy domeny w formularzu Punycode. Jeśli kod nie wymaga tego określonego formatu, użyj Host nazwy hosta.
Wartość zwrócona przez tę właściwość zależy od typu hosta:
- W przypadku nazw hostów DNS: w przypadku prawidłowych nazw domen międzynarodowych znaki inne niż ASCII są kodowane punycode (na przykład
münchen.destaje sięxn--mnchen-3ya.de). Nazwy hostów, które nie są prawidłowymi nazwami IDN, mogą być zwracane as-is i zawierają znaki inne niż ASCII. - W przypadku adresów IPv6: zwraca adres bez otaczających nawiasów i zawiera identyfikator strefy (zakres), jeśli został określony (na przykład
::1lubfe80::1%18). - W przypadku adresów IPv4: zwraca notację kropkowaną-dziesiętną (na przykład
192.168.1.1).
IdnHost jest preferowaną alternatywą dla starszej DnsSafeHost właściwości, ponieważ jej zachowanie nie zależy od app.config ustawień i jest przeznaczone do tworzenia wartości odpowiedniej do rozpoznawania nazw DNS. Należy pamiętać, że w przypadku wyników protokołu IPv6, które zawierają identyfikator strefy, osoby wywołujące mogą nadal wymagać rozebrania identyfikatora strefy przed przekazaniem wartości do interfejsów API, które jej nie akceptują.
Jeśli użyto ciągu ucieczki do skonstruowania tego wystąpienia (na przykład "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), funkcja IdnHost zwraca ciąg ucieczki. Przed użyciem tego ciągu do rozpoznawania nazw DNS należy usunąć dowolny ciąg ucieczki zwrócony z elementu IdnHost. Należy pamiętać, że jeśli użyto nieprawidłowego ciągu unescaped do skonstruowania tego wystąpienia (na przykład "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), funkcja IdnHost zwraca niezauważony ciąg.