Aracılığıyla paylaş


Uri.DnsSafeHost Özellik

Tanım

Gerekirse, manzarası kaldırı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

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 konak 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 DnsSafeHostbelirtilen ana bilgisayar adını veya adresi döndüren ile HostDNS çözümlemesinde kullanımı güvenli olan bir adres döndüren değeri arasındaki farkı gösterir.

// 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 konak adının işaretini kaldırın. Konak adının çıkışını UnescapeDataString silmek için yöntemini kullanabilir 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 özellik ayarlanır.

Bu örneği oluşturmak için kaçış dizesini 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 kaçış dizelerinin DnsSafeHost çı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 uygulamalarında 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 olması garanti edilir.

Özellik RFC DnsSafeHost 3987 tabanlı 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 bunu .NET Framework uygulamalarında ö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, 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 = Hepsi

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

  • idn etkin = HepsiHariçIntranet

    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 Intranet'teki uluslararası adları işlemek için Intranet için kullanılan DNS sunucuları Unicode adlarını desteklemelidir.

  • idn enabled = Yok

    Bu değer, Herhangi 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ırmasının (iriParsing enabled = true) etkinleştirilmesi, 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