Uri.DnsSafeHost Özellik

Tanım

Gerekirse, çıkarıldıktan sonra DNS çözümlemesi için güvenli olan bir ana bilgisayar adı alır.

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

Özellik Değeri

String

URI'nin ana bilgisayar bölümü DNS çözümlemesi için uygun bir biçimde; veya çözümleme için zaten uygunsa özgün ana bilgisayar dizesini seçin.

Özel durumlar

Bu örnek göreli bir URI'yi temsil eder ve bu özellik yalnızca mutlak URI'ler için geçerlidir.

Örnekler

Aşağıdaki örnek bir dizeden bir Uri örnek oluşturur. URI'de belirtilen ana bilgisayar adını veya adresi döndüren değerinden döndürülen Hostdeğer ile DNS çözümlemesinde kullanımı güvenli bir adres döndüren değerinden döndürülen DnsSafeHostdeğer arasındaki farkı gösterir.

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

Açıklamalar'da açıklandığı gibi, çözümlemeden önce ana bilgisayar adının işaretini kaldırın. Konak adının çıkışını silmek için yöntemini kullanabilir UnescapeDataString ve yöntemini çağırarak GetHostEntry bu sorunu çözebilirsiniz.

Açıklamalar

IPv6 adresleri için köşeli ayraçlar ([]) kaldırılır ve ScopeId bu örnek oluşturulurken belirtildiyse özelliği ayarlanır.

Bu örneği oluşturmak için bir kaçış dizesi kullandıysanız (örneğin, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), DnsSafeHost kaçış dizesini döndürür. DNS çözümlemesi için bu dizeyi kullanmadan önce döndürülen DnsSafeHost kaçış dizelerinin çıkışını kaldırın (örn. örn. Bu örneği oluşturmak için geçersiz bir sıralanmamış dize kullandıysanız (örneğin, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), DnsSafeHost sıralanmamış bir dize döndürür.

DnsSafeHost özelliği, bu konunun ilerleyen bölümlerinde açıklandığı gibi .NET Framework uygulamalardaki yapılandırma ayarlarına bağlıdır. IdnHost özelliği, kullanmak DnsSafeHostiçin tercih edilen alternatif olarak sağlanır çünkü IdnHost her zaman DNS güvenli olacağı garanti edilir.

Özellik, DnsSafeHost RFC 3987 temelinde Uluslararası Kaynak Tanımlayıcısı (IRI) desteği sağlamak için .NET Framework v3.5, 3.0 SP1 ve 2.0 SP1'de genişletilmiştir. Ancak, uygulamanın önceki sürümlerle uyumluluğunu sağlamak için .NET Framework uygulamalarda özellikle etkinleştirmeniz gerekir. IRI desteğini etkinleştirmek için aşağıdaki iki değişiklik gereklidir:

  1. .NET Framework 2.0 dizininin altındaki machine.config dosyasına aşağıdaki satırı ekleyin:

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

  2. Etki alanı adına Uluslararası Etki Alanı Adı (IDN) ayrıştırmasının uygulanmasını isteyip istemediğinizi ve IRI ayrıştırma kurallarının uygulanıp uygulanmayacağını belirtin. Bu işlem machine.config veya app.config dosyasında yapılabilir. Örneğin, aşağıdakileri ekleyin:

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

IDN'nin etkinleştirilmesi, bir etki alanı adındaki tüm Unicode etiketlerini Punycode eşdeğerlerine dönüştürür. Punycode adları yalnızca ASCII karakterleri içerir ve her zaman xn-- ön eki ile başlar. Bunun nedeni, çoğu DNS sunucusu yalnızca ASCII karakterlerini desteklediğinden İnternet'te mevcut DNS sunucularını desteklemektir (bkz. RFC 3940).

IDN'nin etkinleştirilmesi yalnızca özelliğin DnsSafeHost değerini etkiler.

Kullanılan DNS sunucularına bağlı olarak IDN için üç olası değer vardır:

  • idn enabled = All

    Bu değer, tüm Unicode etki alanı adlarını Punycode eşdeğerlerine (IDN adları) dönüştürür.

  • idn enabled = AllExceptIntranet

    Bu değer, tüm dış Unicode etki alanı adlarını Punycode eşdeğerlerini (IDN adları) kullanacak şekilde dönüştürür. Bu durumda, yerel intranetteki uluslararası adları işlemek için intranet için kullanılan DNS sunucuları Unicode adlarını desteklemelidir.

  • idn enabled = None

    Bu değer, Hiçbir Unicode etki alanı adını Punycode kullanacak şekilde dönüştürmez. Bu, .NET Framework 2.0 davranışıyla tutarlı olan varsayılan değerdir.

IRI ayrıştırmayı etkinleştirme (iriParsing enabled = true) rfc 3987'deki IRI kurallarına göre karakterleri normalleştirir ve denetler. Varsayılan değer, false RFC 2396 ve RFC 2732'ye (IPv6 değişmez değerleri için) göre karakterleri normalleştirir ve denetler.

IRI desteği hakkında daha fazla bilgi için Uri sınıfın Açıklamalar bölümüne bakın.

Şunlara uygulanır