Hôte vs DnsSafeHost

Je dois extraire l’hôte de l’object Request. Quelle propriété dois-je utiliser et pourquoi?

De MSDN:

Propriété Uri.DnsSafeHost

Une chaîne contenant la partie hôte non échappée de l’URI adaptée à la résolution DNS; ou la chaîne hôte d’origine non échapée, si elle est déjà adaptée à la résolution.

contre

Propriété Uri.Host

Une chaîne contenant le nom d’hôte. Il s’agit généralement du nom d’hôte DNS ou de l’adresse IP du serveur.

Mes tests ont été réalisés avec le serveur de développement ASP.NET. Les deux renvoient toujours localhost . Même lorsque je mets 127.0.0.1, les deux renvoient localhost .

En lisant, la propriété DnsSafeHost gère les adresses IPv6, ainsi que la conversion Unicode en ASCII si nécessaire. Il peut également prendre en compte IRI et IDN. Même si je ne me soucie pas actuellement de ces choses, devrais-je simplement utiliser la propriété DnsSafeHost pour être en sécurité?

Appliquez DnsSafeHost à l’URL si vous souhaitez envoyer le nom d’hôte résultant à un serveur DNS par vous-même. DNS était à l’origine un protocole ASCII uniquement ( et un sous-ensemble de ASCII à cela ). Les URL actuelles permettent des séquences de caractères dans la partie hôte d’une URL qui ne peuvent pas être envoyées directement à un serveur DNS. Les exemples sont:

  • adresses IPv6 entourées de parenthèses . DnsSafeHost supprime les crochets.

  • Noms de domaine non-ASCII, non anglais. DnsSafeHost (facultatif) utilise la RFC 3987 IRI pour normaliser les caractères et convertit les caractères non-ASCII en IDN , codage Punycode .

  • Qui sait quelles URL seront autorisées dans le futur? L’application pourrait bien survivre à nos hypothèses sur ce qui est correct dans une URL. DnsSafeHost y ajoute un certain degré de résilience.

Si vous devez afficher le nom d’hôte pour l’utilisateur, utilisez plutôt la propriété Host .