Udostępnij za pośrednictwem


Uri.DnsSafeHost Właściwość

Definicja

Pobiera nazwę hosta, która po usunięciu systemu 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

String

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 NAZW DNS.

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

Jak wyjaśniono w uwagach, odsuń nazwę hosta przed jego rozpoznawaniem. 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 ustawiana, 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 zwróci ciąg ucieczki. Unescape dowolny 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"), funkcja 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ść została rozszerzona DnsSafeHost w usługach .NET Framework w wersji 3.5, 3.0 SP1 i 2.0 SP1 w celu zapewnienia obsługi międzynarodowego identyfikatora zasobów (IRI) w oparciu o 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 chcesz, aby internacjonalizowana nazwa domeny (IDN) analizowała nazwę domeny i czy należy stosować reguły analizy IRI. Można to zrobić w machine.config lub w pliku app.config . Na przykład dodaj następujące elementy:

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

Włączenie nazwy IDN konwertuje wszystkie etykiety Unicode w nazwie domeny na ich odpowiedniki Punycode. Nazwy punycode zawierają tylko znaki ASCII i zawsze zaczynają się od prefiksu xn-- . Przyczyną tego 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 sieci IDN w zależności od używanych serwerów DNS:

  • włączona nazwa idn = wszystkie

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

  • idn enabled = AllExceptIntranet

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

  • włączona nazwa idn = Brak

    Ta wartość nie spowoduje przekonwertowania nazw domen Unicode w celu użycia narzędzia Punycode. Jest to wartość domyślna zgodna z zachowaniem .NET Framework 2.0.

Włączanie analizowania IRI (włączone iriParsing = 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