Uri.DnsSafeHost Eigenschaft

Definition

Ruft einen Hostnamen, der sicher für die DNS-Auflösung verwendet werden kann, da er keine Escapezeichen enthält.

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

Eigenschaftswert

String

Der Hostteil des URI in einem Format, das für die DNS-Auflösung geeignet ist; oder die ursprüngliche Hostzeichenfolge, wenn sie bereits für die Auflösung geeignet ist.

Ausnahmen

Diese Instanz stellt einen relativen URI dar, diese Eigenschaft ist jedoch 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 Wert, der den in der URI angegebenen Hostnamen oder die in der URI angegebene Adresse zurückgibt, und den von diesem zurückgegebenen DnsSafeHostWertHost, der eine Adresse zurückgibt, die in der DNS-Auflösung sicher verwendet werden kann.

// 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

Wie in den Anmerkungen erläutert, lassen Sie den Hostnamen nicht frei, bevor sie aufgelöst werden. Sie können die UnescapeDataString Methode zum Aufheben des Hostnamens verwenden und sie durch Aufrufen der GetHostEntry Methode auflösen.

Hinweise

Bei IPv6-Adressen werden die Klammern ([]) entfernt und die ScopeId Eigenschaft festgelegt, wenn eine angegeben wurde, wenn diese Instanz erstellt wurde.

Wenn Sie eine escaped Zeichenfolge zum Erstellen dieser Instanz (z. B. ) verwendet haben, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"gibt DnsSafeHost eine escaped Zeichenfolge zurück. Keine escaped-Zeichenfolge, die vor DnsSafeHost der Verwendung dieser Zeichenfolge für die DNS-Auflösung zurückgegeben wurde (siehe Beispiel). Wenn Sie eine ungültige unescaped Zeichenfolge verwendet haben, um diese Instanz zu erstellen (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 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 sein soll.

Die DnsSafeHost Eigenschaft wurde in .NET Framework v3.5, 3.0 SP1 und 2.0 SP1 erweitert, um die Unterstützung für internationale Ressourcenbezeichner (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. Zum Aktivieren der Unterstützung für IRI sind die folgenden beiden Änderungen erforderlich:

  1. Fügen Sie die folgende Zeile zur machine.config Datei unter dem Verzeichnis .NET Framework 2.0 hinzu:

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

  2. Geben Sie an, ob die Internationalized Domain Name (IDN) analysiert werden soll, die auf den Domänennamen angewendet wird 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 einen Domänennamen in ihre Punycode-Äquivalente konvertiert. Punycode-Namen enthalten nur ASCII-Zeichen und beginnen immer mit dem Präfix „xn--“. So werden vorhandene DNS-Server im Internet unterstützt, 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.

Es gibt drei mögliche Werte für IDN abhängig von den DNS-Servern, die verwendet werden:

  • idn enabled = All

    Durch diesen Wert werden alle Unicode-Domänennamen in ihre Punycode-Entsprechungen (IDN-Namen) konvertiert.

  • idn enabled = AllExceptIntranet

    Durch diesen Wert werden alle externen Unicode-Domänennamen so konvertiert, dass die Punycode-Entsprechungen (IDN-Namen) verwendet werden. Wenn internationale Namen im lokalen Intranet verarbeitet werden sollen, müssen die DNS-Server im Intranet Unicode-Namen unterstützen.

  • idn enabled = None

    Durch diesen Wert werden keine Unicode-Domänennamen in ihre Punycode-Entsprechungen konvertiert. Dies ist der Standardwert, der mit dem .NET Framework 2.0-Verhalten übereinstimmt.

Aktivieren der IRI-Analyse (iriParsing enabled = true) normalisiert und überprüft Zeichen gemäß den IRI-Regeln in RFC 3987. Der Standardwert ist false und normalisiert Zeichen gemäß RFC 2396 und RFC 2732 (für IPv6-Literale).

Weitere Informationen zur Unterstützung von IRI finden Sie im Abschnitt "Hinweise" für die Uri Klasse.

Gilt für