Udostępnij za pośrednictwem


Uri.DnsSafeHost Właściwość

Definicja

Pobiera nazwę hosta, która po usunięciu pejzażu w razie potrzeby jest bezpieczna do rozpoznawania nazw DNS.

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

Wartość właściwości

Część hosta identyfikatora URI w formacie odpowiednim do rozpoznawania nazw DNS; lub oryginalny ciąg hosta, jeśli jest już odpowiedni do rozwiązania.

Wyjątki

To wystąpienie reprezentuje względny identyfikator URI, a ta właściwość jest prawidłowa tylko dla bezwzględnych identyfikatorów URI.

Przykłady

Poniższy przykład tworzy Uri wystąpienie na podstawie ciągu. Ilustruje różnicę między wartością zwróconą z Host, która zwraca nazwę hosta lub adres określony w identyfikatorze URI, a wartość zwróconą z DnsSafeHost, która zwraca adres, który jest bezpieczny do użycia w rozpoznawaniu DNS.

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

Jak wyjaśniono w uwagach, przed rozwiązaniem nazwy hosta nie jest wyświetlana. Możesz użyć UnescapeDataString metody , aby usunąć nazwę hosta i rozpoznać ją, wywołując metodę GetHostEntry .

Uwagi

W przypadku adresów IPv6 nawiasy kwadratowe ([]) są usuwane, a ScopeId właściwość jest ustawiona, jeśli została określona podczas konstruowania tego wystąpienia.

Jeśli użyto ciągu ucieczki do skonstruowania tego wystąpienia (na przykład "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), funkcja DnsSafeHost zwraca ciąg ucieczki. Niezaużywany ciąg ucieczki zwrócony przed DnsSafeHost użyciem tego ciągu do rozpoznawania nazw DNS (zobacz przykład). Jeśli użyto nieprawidłowego ciągu unescaped do skonstruowania tego wystąpienia (na przykład "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), wówczas dnsSafeHost zwraca niezauważony ciąg.

Właściwość jest zależna DnsSafeHost od ustawień konfiguracji w aplikacjach .NET Framework, jak opisano w dalszej części tego tematu. Właściwość IdnHost jest udostępniana jako preferowana alternatywa dla używania elementu DnsSafeHost, ponieważ IdnHost gwarantuje, że zawsze jest bezpieczny system DNS.

Właściwość DnsSafeHost została rozszerzona w programie .NET Framework w wersji 3.5, 3.0 SP1 i 2.0 z dodatkiem SP1 w celu zapewnienia obsługi międzynarodowego identyfikatora zasobów (IRI) na podstawie RFC 3987. Aby jednak zapewnić zgodność aplikacji z poprzednimi wersjami, należy ją włączyć w aplikacjach .NET Framework. Aby włączyć obsługę IRI, wymagane są następujące dwie zmiany:

  1. Dodaj następujący wiersz do pliku machine.config w katalogu .NET Framework 2.0:

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

  2. Określ, czy ma być stosowane analizowanie nazw domen międzynarodowych (IDN) do nazwy domeny i czy należy stosować reguły analizowania IRI. Można to zrobić w machine.config lub w pliku app.config . Dodaj na przykład następujące elementy:

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

Włączenie funkcji IDN konwertuje wszystkie elementy Unicode w nazwie domeny na ich odpowiedniki w systemie Punycode. Nazwy punycode zawierają tylko znaki ASCII i zawsze zaczynają się od prefiksu xn-. Powodem jest obsługa istniejących serwerów DNS w Internecie, ponieważ większość serwerów DNS obsługuje tylko znaki ASCII (zobacz RFC 3940).

Włączenie nazwy IDN wpływa tylko na wartość DnsSafeHost właściwości.

Istnieją trzy możliwe wartości dla nazwy IDN w zależności od używanych serwerów DNS:

  • ustawienia idn = wszystkie

    Ta wartość spowoduje przekonwertowanie nazw domen Unicode na ich odpowiedniki Punycode (nazwy IDN).

  • Opcja IDN włączona = Wszystko oprócz intranetu

    Ta wartość spowoduje przekonwertowanie wszystkich zewnętrznych nazw domen Unicode w celu użycia odpowiedników punycode (nazw IDN). W takim przypadku do obsługi nazw międzynarodowych w lokalnym intranecie serwery DNS używane dla intranetu powinny obsługiwać nazwy Unicode.

  • idn włączone = Brak

    Ta wartość nie przekonwertuje żadnych nazw domen Unicode na używanie programu Punycode. Jest to wartość domyślna zgodna z zachowaniem programu .NET Framework 2.0.

Włączanie analizowania IRI (iriParsing enabled = true) normalizuje i sprawdza znaki zgodnie z regułami IRI w RFC 3987. Wartość domyślna to false i normalizuje i sprawdza znaki zgodnie z RFC 2396 i RFC 2732 (dla literałów IPv6).

Aby uzyskać więcej informacji na temat obsługi IRI, zobacz sekcję Uri Uwagi dla klasy.

Dotyczy