Uri.DnsSafeHost Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft einen Hostnamen ab, der bei Bedarf nicht gescapet werden kann, um die DNS-Auflösung zu verwenden.
public:
property System::String ^ DnsSafeHost { System::String ^ get(); };
public string DnsSafeHost { get; }
member this.DnsSafeHost : string
Public ReadOnly Property DnsSafeHost As String
Eigenschaftswert
Der Hostteil des URI in einem Format, das für die DNS-Auflösung geeignet ist; oder die ursprüngliche Hostzeichenfolge, falls sie bereits für die Auflösung geeignet ist.
Ausnahmen
Diese Instanz stellt einen relativen URI dar, und diese Eigenschaft ist nur für absolute URIs gültig.
Beispiele
Im folgenden Beispiel wird eine Uri Instanz aus einer Zeichenfolge erstellt. Es veranschaulicht den Unterschied zwischen dem zurückgegebenen HostWert, der den im URI angegebenen Hostnamen oder die im URI angegebene Adresse zurückgibt, und dem wert, der zurückgegeben DnsSafeHostwird, der eine Adresse zurückgibt, die sicher in der DNS-Auflösung verwendet werden kann.
// 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
Wie in den Anmerkungen erläutert, heben Sie vor dem Auflösen den Hostnamen auf. Sie können die UnescapeDataString Methode verwenden, um den Hostnamen aufzuheben, und Sie können ihn auflösen, indem Sie die GetHostEntry Methode aufrufen.
Hinweise
Bei IPv6-Adressen werden die Klammern ([]) entfernt, und die ScopeId Eigenschaft wird festgelegt, wenn beim Erstellen dieser Instanz eine angegeben wurde.
Wenn Sie zum Erstellen dieser Instanz eine Escapezeichenfolge verwendet haben (z "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm". B. ), gibt DnsSafeHost eine Escapezeichenfolge zurück. Entfernen Sie alle escaped-Zeichenfolgen, die vor DnsSafeHost der Verwendung dieser Zeichenfolge für die DNS-Auflösung zurückgegeben werden (siehe Beispiel). Wenn Sie zum Erstellen dieser Instanz eine ungültige nicht gescapete Zeichenfolge verwendet haben (z. B. "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), gibt DnsSafeHost eine nicht dargestellte Zeichenfolge zurück.
Die DnsSafeHost Eigenschaft hängt von den Konfigurationseinstellungen in .NET Framework-Apps ab, wie weiter unten in diesem Thema erläutert. Die IdnHost Eigenschaft wird als bevorzugte Alternative zur Verwendung DnsSafeHostbereitgestellt, da IdnHost garantiert immer DNS-sicher ist.
Die DnsSafeHost Eigenschaft wurde in .NET Framework v3.5, 3.0 SP1 und 2.0 SP1 erweitert, um unterstützung für internationale Ressourcenbezeichner (International Resource Identifier, IRI) basierend auf RFC 3987 bereitzustellen. Um jedoch die Anwendungskompatibilität mit früheren Versionen sicherzustellen, müssen Sie sie speziell in .NET Framework-Apps aktivieren. Um die Unterstützung für IRI zu aktivieren, sind die folgenden beiden Änderungen erforderlich:
Fügen Sie der Dateimachine.config im Verzeichnis .NET Framework 2.0 die folgende Zeile hinzu:
\<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />Geben Sie an, ob die Internationalized Domain Name (IDN)-Analyse auf den Domänennamen angewendet werden soll und ob IRI-Analyseregeln angewendet werden sollen. Dies kann in der machine.config oder in der app.config Datei erfolgen. Fügen Sie beispielsweise Folgendes hinzu:
<configuration> <uri> <idn enabled="All" /> <iriParsing enabled="true" /> </uri> </configuration>
Durch aktivieren von IDN werden alle Unicode-Bezeichnungen in einem Domänennamen in ihre Punycode-Entsprechungen konvertiert. Punycode-Namen enthalten nur ASCII-Zeichen und beginnen immer mit dem Xn-Präfix. Der Grund hierfür ist die Unterstützung vorhandener DNS-Server im Internet, da die meisten DNS-Server nur ASCII-Zeichen unterstützen (siehe RFC 3940).
Das Aktivieren von IDN wirkt sich nur auf den Wert der DnsSafeHost Eigenschaft aus.
Je nach verwendeten DNS-Servern gibt es drei mögliche Werte für IDN:
idn aktiviert = Alle
Dieser Wert konvertiert alle Unicode-Domänennamen in ihre Punycode-Entsprechungen (IDN-Namen).
idn aktiviert = AllExceptIntranet
Dieser Wert konvertiert alle externen Unicode-Domänennamen in die Verwendung der Punycode-Entsprechungen (IDN-Namen). In diesem Fall, um internationale Namen im lokalen Intranet zu behandeln, sollten die FÜR das Intranet verwendeten DNS-Server Unicode-Namen unterstützen.
idn aktiviert = Keine
Dieser Wert konvertiert keine Unicode-Domänennamen, um Punycode zu verwenden. Dies ist der Standardwert, der mit dem Verhalten von .NET Framework 2.0 konsistent ist.
Durch Aktivieren der IRI-Analyse (iriParsing enabled = true) werden Zeichen gemäß den IRI-Regeln in RFC 3987 normalisiert und überprüft. Der Standardwert ist false und normalisiert und überprüft Zeichen gemäß RFC 2396 und RFC 2732 (für IPv6-Literale).
Weitere Informationen zur IRI-Unterstützung finden Sie im Abschnitt "Hinweise" für den Uri Kurs.