2009-08-03 3 views
38

Ich brauche den Host aus dem Request-Objekt. Welche Eigenschaft sollte ich verwenden und warum?Host vs DnsSafeHost

Von MSDN:

Uri.DnsSafeHost Immobilien

Ein String, der den unescaped Host-Teil der URI enthält, die für die DNS-Auflösung geeignet ist; oder die ursprüngliche unescaped Host-Zeichenfolge, wenn es bereits für die Auflösung geeignet ist.

vs

Uri.Host Immobilien

Ein String, der den Hostnamen enthält. Dies ist normalerweise der DNS-Hostname oder IP-Adresse des Servers.

Meine Tests wurden mit dem ASP.NET Development Server durchgeführt. Beide geben immer localhost zurück. Auch wenn ich 127.0.0.1 eingib, geben beide localhost zurück.

Beim Lesen wird die DnsSafeHost-Eigenschaft IPv6-Adressen verarbeiten und bei Bedarf Unicode zu ASCII konvertieren. Es kann auch IRI und IDN berücksichtigen. Auch wenn mir diese Dinge derzeit egal sind, sollte ich einfach die DnsSafeHost Eigenschaft verwenden, um sicher zu sein?

Antwort

44

Wenden Sie die URL DnsSafeHost an die URL an, wenn Sie beabsichtigen, den resultierenden Hostnamen selbst an einen DNS-Server zu senden. DNS war ursprünglich ein Nur-ASCII-Protokoll (and a subset of ASCII at that). Aktuelle URLs erlauben Zeichenfolgen im Hostteil einer URL, die nicht direkt an einen DNS-Server gesendet werden können. Beispiele sind:

  • bracket-enclosed IPv6 addresses. DnsSafeHost löscht die Klammern.

  • Nicht-ASCII, nicht englische Domänennamen. DnsSafeHost (optional) verwendet RFC 3987 IRI, um die Zeichen zu normalisieren, und konvertiert Nicht-ASCII-Zeichen in IDN, Punycode Codierung.

  • Wer weiß, welche URLs in der Zukunft erlauben? Die Anwendung dürfte unsere Annahmen über das, was in einer URL in Ordnung ist, überdauern. DnsSafeHost fügt dort eine gewisse Widerstandsfähigkeit hinzu.

Wenn Sie die Hostnamen für den Benutzer angezeigt werden, verwenden Sie die Host- Eigenschaft statt.

+5

Das macht Sinn. Ich habe nicht darüber nachgedacht, wie Host den Anzeigenamen und DnsSafeHost programmatisch verwendet werden könnte. Danke für die klare und prägnante Antwort! –