Dil

Uri.IdnHost Özellik

Tanım

Punycode'u uygun şekilde kullanarak konağın RFC 3490 uyumlu Uluslararası Etki Alanı Adını alır. Gerekirse, bu dizenin manzarası kaldırıldıktan sonra DNS çözümlemesi için kullanılması güvenlidir.

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

Özellik Değeri

IDN standardına göre Punycode ile biçimlendirilmiş konak adı.

Ö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 örnekte DNS, IDN, IPv4 ve Host IPv6 girişleri arasında nasıl IdnHost ve farklı olduğu gösterilmektedir:

// Demonstrate differences between Host, IdnHost, and DnsSafeHost.

// Example 1: Regular hostname (ASCII).
Console.WriteLine("Example 1: Regular ASCII hostname");
Uri uri1 = new Uri("http://www.contoso.com:8080/path");
Console.WriteLine($"  Host:        {uri1.Host}");        // www.contoso.com
Console.WriteLine($"  IdnHost:     {uri1.IdnHost}");     // www.contoso.com
Console.WriteLine($"  DnsSafeHost: {uri1.DnsSafeHost}"); // www.contoso.com
Console.WriteLine();

// Example 2: International domain name (non-ASCII).
Console.WriteLine("Example 2: International domain name");
Uri uri2 = new Uri("http://münchen.de/path");
Console.WriteLine($"  Host:        {uri2.Host}");        // münchen.de (original)
Console.WriteLine($"  IdnHost:     {uri2.IdnHost}");     // xn--mnchen-3ya.de (punycode)
Console.WriteLine($"  DnsSafeHost: {uri2.DnsSafeHost}"); // münchen.de or xn--mnchen-3ya.de, depending on configuration.
Console.WriteLine();

// Example 3: International domain name already in punycode (encoded) form.
Console.WriteLine("Example 3: Already-encoded international domain name");
Uri uri2Encoded = new Uri("http://xn--mnchen-3ya.de/path");
Console.WriteLine($"  Host:        {uri2Encoded.Host}");        // xn--mnchen-3ya.de (as provided)
Console.WriteLine($"  IdnHost:     {uri2Encoded.IdnHost}");     // xn--mnchen-3ya.de (already punycode)
Console.WriteLine($"  DnsSafeHost: {uri2Encoded.DnsSafeHost}"); // xn--mnchen-3ya.de
Console.WriteLine();

// Example 4: IPv6 address without zone ID.
Console.WriteLine("Example 4: IPv6 address without zone ID");
Uri uri3 = new Uri("http://[::1]:8080/path");
Console.WriteLine($"  Host:        {uri3.Host}");        // [::1] (with brackets)
Console.WriteLine($"  IdnHost:     {uri3.IdnHost}");     // ::1 (without brackets)
Console.WriteLine($"  DnsSafeHost: {uri3.DnsSafeHost}"); // ::1 (without brackets)
Console.WriteLine();

// Example 5: IPv6 link-local address with zone ID.
Console.WriteLine("Example 5: IPv6 link-local address with zone ID");
Uri uri4 = new Uri("http://[fe80::1%10]:8080/path");
Console.WriteLine($"  Host:        {uri4.Host}");        // [fe80::1] (with brackets, no zone ID)
Console.WriteLine($"  IdnHost:     {uri4.IdnHost}");     // fe80::1%10 (without brackets, with zone ID)
Console.WriteLine($"  DnsSafeHost: {uri4.DnsSafeHost}"); // fe80::1%10 (without brackets, with zone ID)
Console.WriteLine();

// Example 6: IPv4 address.
Console.WriteLine("Example 6: IPv4 address");
Uri uri5 = new Uri("http://192.168.1.1:8080/path");
Console.WriteLine($"  Host:        {uri5.Host}");        // 192.168.1.1
Console.WriteLine($"  IdnHost:     {uri5.IdnHost}");     // 192.168.1.1
Console.WriteLine($"  DnsSafeHost: {uri5.DnsSafeHost}"); // 192.168.1.1

Açıklamalar

Bu özellik, Punycode formunda etki alanı adı gerektiren alt düzey ağ protokollerinin kullanımı için sağlanır. Kodunuz belirli bir biçimi gerektirmiyorsa konak adı için kullanın Host .

Bu özellik tarafından döndürülen değer konak türüne bağlıdır:

  • DNS ana bilgisayar adları için: Geçerli uluslararası etki alanı adları için, ASCII olmayan karakterler punycode olarak kodlanır (örneğin, münchen.de olurxn--mnchen-3ya.de). Geçerli IDN'ler olmayan konak adları as-is döndürülebilir ve ASCII olmayan karakterler içerebilir.
  • IPv6 adresleri için: Çevresindeki köşeli ayraçlar olmadan adresi döndürür ve belirtildiyse bölge kimliğini (kapsam) içerir (örneğin, ::1 veya fe80::1%18).
  • IPv4 adresleri için: Noktalı ondalık gösterimini verir (örneğin, 192.168.1.1).

IdnHost eski özelliğin DnsSafeHost tercih edilen alternatifidir çünkü davranışı app.config ayarlarına bağımlı değildir ve DNS çözümlemesi için uygun bir değer üretmek üzere tasarlanmıştır. Bölge kimliği içeren IPv6 sonuçları için, çağıranların değeri kabul etmeyen API'lere geçirmeden önce bölge kimliğini silmeleri gerekebileceğini unutmayın.

Bu örneği oluşturmak için kaçış dizesini kullandıysanız (örneğin, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), IdnHost kaçış dizesini döndürür. DNS çözümlemesi için bu dizeyi kullanmadan önce IdnHost'tan döndürülen tüm kaçış dizelerinin çıkışlarını kaldırmalısınız. 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") IdnHost'un sıralanmamış bir dize döndürdüğünü unutmayın.

Şunlara uygulanır