Uri.DnsSafeHost Eigenschap

Definitie

Hiermee haalt u een hostnaam op die, nadat u indien nodig ongezichtig bent, veilig is voor DNS-omzetting.

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

Waarde van eigenschap

Het hostgedeelte van de URI in een indeling die geschikt is voor DNS-omzetting; of de oorspronkelijke hosttekenreeks, als deze al geschikt is voor resolutie.

Uitzonderingen

Dit exemplaar vertegenwoordigt een relatieve URI en deze eigenschap is alleen geldig voor absolute URI's.

Voorbeelden

In het volgende voorbeeld wordt een Uri exemplaar van een tekenreeks gemaakt. Het illustreert het verschil tussen de waarde die wordt geretourneerd van Host, die de hostnaam of het adres retourneert dat is opgegeven in de URI, en de waarde waaruit DnsSafeHostwordt geretourneerd , waarmee een adres wordt geretourneerd dat veilig kan worden gebruikt in DNS-omzetting.

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

Zoals uitgelegd in Opmerkingen, maakt u de hostnaam ongedaan voordat u deze oplost. U kunt de UnescapeDataString methode gebruiken om de hostnaam ongedaan te maken en u kunt deze oplossen door de GetHostEntry methode aan te roepen.

Opmerkingen

Voor IPv6-adressen worden de vierkante haken ([]) verwijderd en wordt de ScopeId eigenschap ingesteld, als er een is opgegeven toen dit exemplaar werd gemaakt.

Als u een escape-tekenreeks hebt gebruikt om dit exemplaar te maken (bijvoorbeeld "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), retourneert DnsSafeHost een escape-tekenreeks. Maak een escape-tekenreeks ongedaan die is DnsSafeHost geretourneerd voordat u die tekenreeks voor DNS-resolutie gebruikt (zie het voorbeeld). Als u een ongeldige niet-gescaped tekenreeks hebt gebruikt om dit exemplaar samen te stellen (bijvoorbeeld 'http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm'), retourneert DnsSafeHost een niet-gescapede tekenreeks.

De eigenschap DnsSafeHost is afhankelijk van configuratie-instellingen in .NET Framework-apps, zoals verderop in dit onderwerp wordt besproken. De IdnHost eigenschap wordt geleverd als alternatief voor het gebruik DnsSafeHostvan , omdat IdnHost gegarandeerd altijd DNS veilig is.

De eigenschap DnsSafeHost is uitgebreid in .NET Framework v3.5, 3.0 SP1 en 2.0 SP1 om ondersteuning voor International Resource Identifier (IRI) te bieden op basis van RFC 3987. Om ervoor te zorgen dat toepassingen compatibel zijn met eerdere versies, moet u deze specifiek inschakelen in .NET Framework-apps. Om ondersteuning voor IRI in te schakelen, zijn de volgende twee wijzigingen vereist:

  1. Voeg de volgende regel toe aan het bestand machine.config onder de map .NET Framework 2.0:

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

  2. Geef op of u idN-parsering (Internationalized Domain Name) wilt toepassen op de domeinnaam en of IRI-parseringsregels moeten worden toegepast. Dit kan worden gedaan in de machine.config of in het app.config-bestand . Voeg bijvoorbeeld het volgende toe:

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

Als u IDN inschakelt, worden alle Unicode-labels in een domeinnaam geconverteerd naar hun Punycode-equivalenten. Punycodenamen bevatten alleen ASCII-tekens en beginnen altijd met het xn-voorvoegsel. De reden hiervoor is om bestaande DNS-servers op internet te ondersteunen, omdat de meeste DNS-servers alleen ASCII-tekens ondersteunen (zie RFC 3940).

Het inschakelen van IDN is alleen van invloed op de waarde van de DnsSafeHost eigenschap.

Er zijn drie mogelijke waarden voor IDN, afhankelijk van de DNS-servers die worden gebruikt:

  • idn ingeschakeld = Alle

    Met deze waarde worden unicode-domeinnamen geconverteerd naar hun Punycode-equivalenten (IDN-namen).

  • idn ingeschakeld = AllExceptIntranet

    Met deze waarde worden alle externe Unicode-domeinnamen geconverteerd om de Punycode-equivalenten (IDN-namen) te gebruiken. In dit geval moeten de DNS-servers die worden gebruikt voor het intranet ondersteuning bieden voor Unicode-namen om internationale namen op het lokale intranet te verwerken.

  • idn ingeschakeld = Geen

    Met deze waarde worden geen Unicode-domeinnamen geconverteerd om Punycode te gebruiken. Dit is de standaardwaarde, die consistent is met het gedrag van .NET Framework 2.0.

Het inschakelen van IRI parseren (iriParsing ingeschakeld = true) normaliseert en controleert tekens volgens de IRI-regels in RFC 3987. De standaardwaarde is false en normaliseert en controleert tekens volgens RFC 2396 en RFC 2732 (voor letterlijke IPv6-waarden).

Zie de sectie Opmerkingen voor de Uri klas voor meer informatie over IRI-ondersteuning.

Van toepassing op