Condividi tramite


Uri.DnsSafeHost Proprietà

Definizione

Ottiene un nome host che, dopo l'annullamento dell'escape, se necessario, è sicuro da usare 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 gli 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 = 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 l'escape del nome host prima di risolverlo. È possibile usare il UnescapeDataString metodo per annullare l'escape del nome host e risolverlo chiamando il GetHostEntry metodo .

Commenti

Per gli indirizzi IPv6, le parentesi quadre ([]) vengono rimosse e la ScopeId proprietà è impostata, se ne è stata specificata una al momento della costruzione dell'istanza.

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 stringa senza caratteri di escape non valida per costruire questa istanza , ad esempio "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), DnsSafeHost restituisce una stringa senza caratteri di escape.

La DnsSafeHost proprietà dipende dalle impostazioni di configurazione nelle app .NET Framework, come descritto più avanti in questo argomento. La IdnHost proprietà viene fornita come alternativa preferita all'uso DnsSafeHostdi , perché IdnHost è garantita sempre la sicurezza DNS.

La DnsSafeHost proprietà è stata estesa in .NET Framework v3.5, 3.0 SP1 e 2.0 SP1 per fornire supporto IRI (International Resource Identifier) basato su RFC 3987. Tuttavia, per garantire la compatibilità delle applicazioni con le versioni precedenti, è necessario abilitarla in modo specifico nelle app .NET Framework. Per abilitare il supporto per IRI, sono necessarie le due modifiche seguenti:

  1. 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" />

  2. Specificare se si vuole applicare l'analisi IDN (Internationalized Domain Name) al nome di dominio e se devono essere applicate le regole di analisi IRI. 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 nei loro equivalenti Punycode. I nomi punycode contengono solo caratteri ASCII e iniziano sempre con il prefisso xn- . Il motivo è supportare i server DNS esistenti su Internet, poiché la maggior parte dei server DNS supporta solo i caratteri ASCII (vedere RFC 3940).

L'abilitazione dell'IDN influisce solo sul valore della DnsSafeHost proprietà.

Esistono tre valori possibili per IDN a seconda dei server DNS usati:

  • idn enabled = Tutti

    Questo valore convertirà tutti i nomi di dominio Unicode nei rispettivi equivalenti Punycode (nomi IDN).

  • idn enabled = Tutto tranne l'Intranet

    Questo valore convertirà tutti i nomi di dominio Unicode esterni per usare gli equivalenti Punycode (nomi IDN). In questo caso per gestire i nomi internazionali nella Intranet locale, i server DNS usati per intranet devono supportare i nomi Unicode.

  • idn enabled = Nessuno

    Questo valore non convertirà nomi di dominio Unicode per l'uso di Punycode. Si tratta del valore predefinito, coerente con il comportamento di .NET Framework 2.0.

L'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 ai valori letterali RFC 2396 e RFC 2732 (per i valori letterali IPv6).

Per altre informazioni sul supporto IRI, vedere la sezione Osservazioni per la Uri classe .

Si applica a