Uri.DnsSafeHost Uri.DnsSafeHost Uri.DnsSafeHost Uri.DnsSafeHost Property

Definition

Ruft einen Hostnamen, der sicher für die DNS-Auflösung verwendet werden kann, da er keine Escapezeichen enthält.Gets a host name that, after being unescaped if necessary, is safe to use for DNS resolution.

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

Eigenschaftswert

Ein String, das den Hostteil des URIs in einem für die DNS-Auflösung geeigneten Format enthält. oder die ursprüngliche Host Zeichenfolge, wenn Sie bereits für die Auflösung geeignet ist.A String that contains the host part of the URI in a format suitable for DNS resolution; or the original host string, if it is already suitable for resolution.

Ausnahmen

Diese Instanz stellt einen relativen URI dar, diese Eigenschaft ist jedoch nur für absolute URIs gültig.This instance represents a relative URI, and this property is valid only for absolute URIs.

Beispiele

Im folgenden Beispiel wird eine Uri-Instanz aus einer Zeichenfolge erstellt.The following example creates a Uri instance from a string. Es veranschaulicht den Unterschied zwischen dem Wert, der von Host zurückgegeben wird, der den im URI angegebenen Hostnamen oder die Adresse zurückgibt, und dem von DnsSafeHost zurückgegebenen Wert, der eine Adresse zurückgibt, die sicher in der DNS-Auflösung verwendet werden kann.It illustrates the difference between the value returned from Host, which returns the host name or address specified in the URI, and the value returned from DnsSafeHost, which returns an address that is safe to use in DNS resolution.

// 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.         
    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 unter "Hinweise" erläutert, müssen Sie den Hostnamen vor dem Auflösen entziehen.As explained in Remarks, unescape the host name before resolving it. Sie können die UnescapeDataString-Methode verwenden, um das Escapezeichen für den Hostnamen zu verwenden, und Sie können es auflösen, indem Sie die GetHostEntry-Methode aufrufen.You can use the UnescapeDataString method to unescape the host name, and you can resolve it by calling the GetHostEntry method.

Hinweise

Bei IPv6-Adressen werden die Klammern ([]) entfernt, und die ScopeId-Eigenschaft wird festgelegt, wenn eine beim Konstruieren dieser Instanz angegeben wurde.For IPv6 addresses, the brackets ([]) are removed and the ScopeId property is set, if one was specified when this instance was constructed.

Wenn Sie zum Erstellen dieser Instanz eine Zeichenfolge mit Escapezeichen verwendet haben (z. b. "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), gibt DnsSafeHost eine Escapezeichenfolge zurück.If you used an escaped string to construct this instance (for example, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), then DnsSafeHost returns an escaped string. Lösen Sie die Escapezeichen aus, die von DnsSafeHost zurückgegeben werden, bevor Sie diese Zeichenfolge für die DNS-Auflösung verwenden (siehe Beispiel)Unescape any escaped string returned from DnsSafeHost before using that string for DNS resolution (see the Example). Wenn Sie zum Erstellen dieser Instanz eine ungültige Zeichenfolge ohne Escapezeichen verwendet haben (z. b. "http://[fe80:: 200:39ff: fe36:1a2d% 4]/temp/example.htm"), gibt DnsSafeHost eine Zeichenfolge ohne Escapezeichen zurück.If you used an invalid unescaped string to construct this instance (for example, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), then DnsSafeHost returns an unescaped string.

Die DnsSafeHost-Eigenschaft ist abhängig von den Konfigurationseinstellungen, wie weiter unten in diesem Thema erläutert wird.The DnsSafeHost property is dependent on configuration settings, as discussed later in this topic. Konfigurationseinstellungen können von Windows Store-Anwendungen nicht geändert werden, was zu inkonsistenten Ergebnissen führen kann, wenn DnsSafeHost verwendet wird.Configuration settings cannot be changed by Windows Store applications, which can lead to inconsistent results when using DnsSafeHost. Die IdnHost-Eigenschaft wird als bevorzugte Alternative zur Verwendung von DnsSafeHost bereitgestellt, da IdnHost garantiert immer DNS-sicher ist, unabhängig von der aktuellen app. config -Einstellungen.The IdnHost property is provided as the preferred alternative to using DnsSafeHost, because IdnHost is guaranteed to always be DNS safe, no matter what the current app.config settings might be.

Die Eigenschaft "DnsSafeHost" wurde in .NET Framework v 3.5, 3,0 SP1 und 2,0 SP1 erweitert, um Unterstützung für internationale Ressourcen Bezeichner (IRI) basierend auf RFC 3987 bereitzustellen.The DnsSafeHost property has been extended in .NET Framework v3.5, 3.0 SP1, and 2.0 SP1 to provide International Resource Identifier (IRI) support based on RFC 3987. Derzeitige Benutzer werden keine Änderung gegenüber dem .NET Framework 2.0-Verhalten feststellen, außer IRI wird explizit aktiviert.Current users will not see any change from the .NET Framework 2.0 behavior unless they specifically enable IRI. Dadurch wird die Anwendungskompatibilität mit früheren Versionen von .NET Framework garantiert.This ensures application compatibility with prior versions of the .NET Framework.

Die folgenden beiden Änderungen sind erforderlich, um die Unterstützung für IRI zu aktivieren:To enable support for IRI, the following two changes are required:

  1. Fügen Sie der Datei Machine. config im Verzeichnis .NET Framework 2,0 die folgende Zeile hinzu.Add the following line to the machine.config file under the .NET Framework 2.0 directory

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

  2. Geben Sie an, ob die IDN-Verarbeitung (Internationalized Domain Name) auf den Domänen Namen angewendet werden soll und ob IRI-Regeln angewendet werden sollen.Specify whether you want Internationalized Domain Name (IDN) parsing applied to the domain name and whether IRI parsing rules should be applied. Dies kann in der Datei " Machine. config " oder in der Datei " app. config " erfolgen.This can be done in the machine.config or in the app.config file. Fügen Sie z. b. Folgendes hinzu:For example, add the following:

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

Beim Aktivieren von IDN werden alle Unicode-Bezeichnungen in einem Domänennamen in ihre Punycode-Entsprechungen konvertiert.Enabling IDN will convert all Unicode labels in a domain name to their Punycode equivalents. Punycode-Namen enthalten nur ASCII-Zeichen und beginnen immer mit dem Präfix „xn--“.Punycode names contain only ASCII characters and always start with the xn-- prefix. So werden vorhandene DNS-Server im Internet unterstützt, da die meisten DNS-Server nur ASCII-Zeichen unterstützen (siehe RFC 3940).The reason for this is to support existing DNS servers on the Internet, since most DNS servers only support ASCII characters (see RFC 3940).

Das Aktivieren von IDN wirkt sich nur auf den Wert der DnsSafeHost-Eigenschaft aus.Enabling IDN only affects the value of the DnsSafeHost property.

Es gibt drei mögliche Werte für IDN, abhängig von den verwendeten DNS-Servern:There are three possible values for IDN depending on the DNS servers that are used:

  • IDN aktiviert = alleidn enabled = All

    Durch diesen Wert werden alle Unicode-Domänennamen in ihre Punycode-Entsprechungen (IDN-Namen) konvertiert.This value will convert any Unicode domain names to their Punycode equivalents (IDN names).

  • IDN aktiviert = AllExceptIntranetidn enabled = AllExceptIntranet

    Durch diesen Wert werden alle externen Unicode-Domänennamen so konvertiert, dass die Punycode-Entsprechungen (IDN-Namen) verwendet werden.This value will convert all external Unicode domain names to use the Punycode equivalents (IDN names). Wenn internationale Namen im lokalen Intranet verarbeitet werden sollen, müssen die DNS-Server im Intranet Unicode-Namen unterstützen.In this case to handle international names on the local Intranet, the DNS servers that are used for the Intranet should support Unicode names.

  • IDN aktiviert = Noneidn enabled = None

    Durch diesen Wert werden keine Unicode-Domänennamen in ihre Punycode-Entsprechungen konvertiert.This value will not convert any Unicode domain names to use Punycode. Dies ist der Standardwert, der mit dem .NET Framework 2,0-Verhalten konsistent ist.This is the default value which is consistent with the .NET Framework 2.0 behaviour.

Durch das Aktivieren der IRI-Verarbeitung (iribising aktiviert = true) erfolgt die Normalisierung und Zeichen Überprüfung gemäß den neuesten IRI-Regeln in RFC 3987.Enabling IRI parsing (iriParsing enabled = true) will do normalization and character checking according to the latest IRI rules in RFC 3987. Der Standardwert ist false und führt eine Normalisierung und Zeichen Überprüfung gemäß RFC 2396 und RFC 2732 durch (für IPv6-Literale).The default value is false and will do normalization and character checking according to RFC 2396 and RFC 2732 (for IPv6 literals).

Weitere Informationen zur IRI-Unterstützung finden Sie im Abschnitt "Hinweise" für die Uri-Klasse.For more information on IRI support, see the Remarks section for the Uri class.

Gilt für: