Uri.DnsSafeHost Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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:
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" />
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.