Uri.IdnHost Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene il nome di dominio internazionale conforme a RFC 3490 dell'host, usando Punycode in base alle esigenze. Questa stringa, dopo essere stata annullata se necessario, è sicura da usare per la risoluzione DNS.
public:
property System::String ^ IdnHost { System::String ^ get(); };
public string IdnHost { get; }
member this.IdnHost : string
Public ReadOnly Property IdnHost As String
Valore della proprietà
Nome host, formattato con Punycode in base allo standard IDN.
Eccezioni
Questa istanza rappresenta un URI relativo e questa proprietà è valida solo per gli URI assoluti.
Esempio
L'esempio seguente illustra come Host e IdnHost differiscono tra gli input 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
Commenti
Questa proprietà viene fornita per l'uso di protocolli di rete di livello inferiore che richiedono il nome di dominio nel formato Punycode. Se il codice non richiede tale formato specifico, usare Host per il nome host.
Il valore restituito da questa proprietà dipende dal tipo di host:
- Per i nomi host DNS: per i nomi di dominio internazionali validi, i caratteri non ASCII sono codificati come punycode (ad esempio,
münchen.dediventaxn--mnchen-3ya.de). I nomi host non validi possono essere restituiti as-is e includono caratteri non ASCII. - Per gli indirizzi IPv6: restituisce l'indirizzo senza parentesi quadre circostanti e include l'ID zona (ambito) se è stato specificato uno (ad esempio,
::1ofe80::1%18). - Per gli indirizzi IPv4: restituisce la notazione decimale punteggiata , ad esempio
192.168.1.1.
IdnHost è l'alternativa preferita alla proprietà legacy DnsSafeHost , perché il comportamento non dipende dalle impostazioni app.config ed è progettato per produrre un valore adatto per la risoluzione DNS. Si noti che per i risultati IPv6 che includono un ID zona, i chiamanti potrebbero comunque dover rimuovere l'ID zona prima di passare il valore alle API che non lo accettano.
Se è stata usata una stringa di escape per costruire questa istanza ,ad esempio "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm", IdnHost restituisce una stringa di escape. È consigliabile annullare l'escape di qualsiasi stringa di escape restituita da IdnHost prima di usare tale stringa per la risoluzione DNS. Tenere presente che se è stata usata una stringa senza caratteri di escape non valida per costruire questa istanza , ad esempio "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), IdnHost restituisce una stringa senza caratteri di escape.