Uri.DnsSafeHost Propriété

Définition

Obtient un nom d’hôte qui, une fois sans séquence d’échappement si nécessaire, peut être utilisé en toute sécurité pour la résolution DNS.

public:
 property System::String ^ DnsSafeHost { System::String ^ get(); };
public string DnsSafeHost { get; }
member this.DnsSafeHost : string
Public ReadOnly Property DnsSafeHost As String

Valeur de propriété

String

Partie hôte de l’URI dans un format adapté à la résolution DNS ; ou la chaîne d’hôte d’origine, si elle est déjà adaptée à la résolution.

Exceptions

Cette instance représente un URI relatif, et cette propriété est uniquement valide pour les URI absolus.

Exemples

L’exemple suivant crée une Uri instance à partir d’une chaîne. Il illustre la différence entre la valeur retournée par Host, qui retourne le nom d’hôte ou l’adresse spécifié dans l’URI, et la valeur retournée par DnsSafeHost, qui retourne une adresse sûre à utiliser dans la résolution 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

Comme expliqué dans Remarques, annulez l’échappement du nom d’hôte avant de le résoudre. Vous pouvez utiliser la UnescapeDataString méthode pour annuler la séquence d’échappement du nom d’hôte, et vous pouvez la résoudre en appelant la GetHostEntry méthode.

Remarques

Pour les adresses IPv6, les crochets ([]) sont supprimés et la ScopeId propriété est définie, si elle a été spécifiée lors de la construction de cette instance.

Si vous avez utilisé une chaîne d’échappement pour construire cette instance (par exemple), "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"DnsSafeHost retourne une chaîne d’échappement. Annulez l’échappement d’une chaîne d’échappement retournée avant d’utiliser DnsSafeHost cette chaîne pour la résolution DNS (voir l’exemple). Si vous avez utilisé une chaîne non exécutée non valide pour construire cette instance (par exemple, « http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm »), DnsSafeHost retourne une chaîne sans séquence d’échappement.

La DnsSafeHost propriété dépend des paramètres de configuration dans les applications .NET Framework, comme décrit plus loin dans cette rubrique. La IdnHost propriété est fournie comme alternative préférée à l’utilisation DnsSafeHost, car IdnHost elle est garantie d’être toujours sécurisée PAR DNS.

La DnsSafeHost propriété a été étendue dans .NET Framework v3.5, 3.0 SP1 et 2.0 SP1 pour fournir la prise en charge IRI (International Resource Identifier) basée sur RFC 3987. Toutefois, pour garantir la compatibilité des applications avec les versions antérieures, vous devez l’activer spécifiquement dans les applications .NET Framework. Pour activer la prise en charge de l’IRI, les deux modifications suivantes sont requises :

  1. Ajoutez la ligne suivante au fichier machine.config sous le répertoire .NET Framework 2.0 :

    \<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  2. Spécifiez si vous souhaitez que l’analyse IDN (Internationalized Domain Name) soit appliquée au nom de domaine et si les règles d’analyse IRI doivent être appliquées. Cette opération peut être effectuée dans le machine.config ou dans le fichier app.config . Par exemple, ajoutez les éléments suivants :

    <configuration>
      <uri>
        <idn enabled="All" />
        <iriParsing enabled="true" />
      </uri>
    </configuration>
    

L’activation d’IDN convertit toutes les étiquettes Unicode d’un nom de domaine en leurs équivalents Punycode. Les noms Punycode contiennent uniquement des caractères ASCII et commencent toujours par le préfixe xn--. Cela permet de garantir la prise en charge des serveurs DNS existants sur Internet, la plupart d’entre eux prenant uniquement en charge les caractères ASCII (consultez la norme RFC 3940).

L’activation d’IDN affecte uniquement la valeur de la DnsSafeHost propriété.

Il existe trois valeurs possibles pour IDN en fonction des serveurs DNS utilisés :

  • idn enabled = All

    Cette valeur convertit tous les noms de domaine Unicode en leurs équivalents Punycode (noms IDN).

  • idn enabled = AllExceptIntranet

    Cette valeur convertit tous les noms de domaine Unicode externes pour utiliser leurs équivalents Punycode (noms IDN). Dans ce cas, pour gérer des noms internationaux sur l'Intranet local, les serveurs DNS utilisés pour l'Intranet doivent prendre en charge les noms Unicode.

  • idn enabled = None

    Cette valeur ne convertit aucun nom de domaine Unicode pour utiliser Punycode. Il s’agit de la valeur par défaut, qui est cohérente avec le comportement .NET Framework 2.0.

L’activation de l’analyse IRI (iriParsing enabled = true) normalise et vérifie les caractères en fonction des règles IRI dans RFC 3987. La valeur par défaut est false et normalise et vérifie les caractères selon RFC 2396 et RFC 2732 (pour les littéraux IPv6).

Pour plus d’informations sur la prise en charge de l’IRI, consultez la section Notes de la Uri classe.

S’applique à