Uri.DnsSafeHost 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 un nome host che, dopo la rimozione dei caratteri di escape, se necessario, può essere usato in sicurezza per la risoluzione DNS.
public:
property System::String ^ DnsSafeHost { System::String ^ get(); };
public string DnsSafeHost { get; }
member this.DnsSafeHost : string
Public ReadOnly Property DnsSafeHost As String
Valore della proprietà
Parte host dell'URI in un formato adatto per la risoluzione DNS; o la stringa host originale, se è già adatta per la risoluzione.
Eccezioni
Questa istanza rappresenta un URI relativo e questa proprietà è valida solo per URI assoluti.
Esempio
Nell'esempio seguente viene creata un'istanza Uri da una stringa. Illustra la differenza tra il valore restituito da Host, che restituisce il nome host o l'indirizzo specificato nell'URI e il valore restituito da DnsSafeHost, che restituisce un indirizzo che è sicuro da usare nella risoluzione DNS.
// Create new Uri using a string address.
Uri^ address = gcnew Uri( "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm" );
// Make the address DNS safe.
// The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console::WriteLine( address->Host );
// The following outputs "fe80::200:39ff:fe36:1a2d%254".
Console::WriteLine( address->DnsSafeHost );
// Create new Uri using a string address.
Uri address = new Uri("http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm");
// Make the address DNS safe.
// The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console.WriteLine(address.Host);
// The following outputs "fe80::200:39ff:fe36:1a2d%254".
Console.WriteLine(address.DnsSafeHost);
// Create new Uri using a string address.
let address = Uri "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"
// Make the address DNS safe.
// The following outputs "[fe80::200:39ff:fe36:1a2d]".
printfn $"{address.Host}"
// The following outputs "fe80::200:39ff:fe36:1a2d%254".
printfn $"{address.DnsSafeHost}"
' Create new Uri using a string address.
Dim address As New Uri("http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm")
' Make the address DNS safe.
' The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console.WriteLine(address.Host)
' The following outputs "fe80::200:39ff:fe36:1a2d%254".
Console.WriteLine(address.DnsSafeHost)
End Sub
Come illustrato in Osservazioni, annullare il panorama del nome host prima di risolverlo. È possibile usare il metodo per annullare l'escape del UnescapeDataString nome host e risolverlo chiamando il GetHostEntry metodo .
Commenti
Per gli indirizzi IPv6, le parentesi quadre ([]) vengono rimosse e la ScopeId proprietà viene impostata, se una è stata specificata quando questa istanza è stata costruita.
Se è stata usata una stringa di escape per costruire questa istanza ,ad esempio , "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"
DnsSafeHost restituisce una stringa di escape. Annullare l'escape di qualsiasi stringa di escape restituita da DnsSafeHost
prima di usare tale stringa per la risoluzione DNS (vedere l'esempio). Se è stata usata una stringanona non valida per costruire questa istanza ,ad esempio "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), DnsSafeHost restituisce una stringa non visualizzata.
La DnsSafeHost proprietà dipende dalle impostazioni di configurazione nelle app .NET Framework, come illustrato più avanti in questo argomento. La IdnHost proprietà viene fornita come alternativa preferita all'uso DnsSafeHostdi , perché IdnHost è garantito essere sempre sicuro DNS.
La DnsSafeHost proprietà è stata estesa in .NET Framework v3.5, 3.0 SP1 e 2.0 SP1 per fornire il supporto di International Resource Identifier (IRI) basato su RFC 3987. Tuttavia, per garantire la compatibilità dell'applicazione con le versioni precedenti, è necessario abilitarla in modo specifico nelle app .NET Framework. Per abilitare il supporto per IRI, sono necessarie due modifiche seguenti:
Aggiungere la riga seguente al file machine.config nella directory .NET Framework 2.0:
\<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Specificare se si vuole applicare l'analisi di IDN (Internationalized Domain Name) al nome di dominio e se le regole di analisi IRI devono essere applicate. Questa operazione può essere eseguita nel machine.config o nel file diapp.config . Ad esempio, aggiungere quanto segue:
<configuration> <uri> <idn enabled="All" /> <iriParsing enabled="true" /> </uri> </configuration>
L'abilitazione di IDN converte tutte le etichette Unicode in un nome di dominio negli equivalenti di Punycode. I nomi Punycode contengono solo caratteri ASCII e iniziano sempre con il prefisso "xn--". Questo avviene per supportare i server DNS esistenti in Internet, in quanto la maggior parte dei server DNS supporta solo caratteri ASCII. Vedere il documento RFC 3940.
L'abilitazione DnsSafeHost di IDN influisce solo sul valore della proprietà.
Esistono tre valori possibili per IDN a seconda dei server DNS usati:
idn abilitato = Tutti
Questo valore convertirà qualsiasi nome di dominio Unicode negli equivalenti Punycode (nomi IDN).
idn abilitato = AllExceptIntranet
Questo valore convertirà tutti i nomi di dominio Unicode esterni per l'utilizzo degli equivalenti Punycode (nomi IDN). In questo caso, per gestire nomi internazionali sulla rete Intranet locale, è necessario che i server DNS utilizzati per la rete Intranet supportino i nomi Unicode.
idn abilitato = Nessuno
Questo valore non convertirà alcun nome di dominio Unicode per l'utilizzo di Punycode Si tratta del valore predefinito, coerente con il comportamento di .NET Framework 2.0.
Abilitazione dell'analisi IRI (iriParsing enabled = true
) normalizza e controlla i caratteri in base alle regole IRI in RFC 3987. Il valore predefinito è false
e normalizza e controlla i caratteri in base a RFC 2396 e RFC 2732 (per valori letterali IPv6).
Per altre informazioni sul supporto IRI, vedere la sezione Osservazioni per la Uri classe.