Uri.IdnHost Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan Nama Domain Internasional host yang sesuai dengan RFC 3490, menggunakan Punycode yang sesuai. String ini, setelah tidak dihapus jika perlu, aman digunakan untuk resolusi DNS.
public:
property System::String ^ IdnHost { System::String ^ get(); };
public string IdnHost { get; }
member this.IdnHost : string
Public ReadOnly Property IdnHost As String
Nilai Properti
Nama host, diformat dengan Punycode sesuai dengan standar IDN.
Pengecualian
Instans ini mewakili URI relatif, dan properti ini hanya valid untuk URI absolut.
Contoh
Contoh berikut menunjukkan cara Host dan IdnHost perbedaan di seluruh input DNS, IDN, IPv4, dan IPv6:
// 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
Keterangan
Properti ini disediakan untuk penggunaan protokol jaringan tingkat bawah yang memerlukan nama domain dalam bentuk Punycode. Jika kode Anda tidak memerlukan format tertentu, gunakan Host untuk nama host.
Nilai yang dikembalikan oleh properti ini tergantung pada jenis host:
- Untuk nama host DNS: Untuk nama domain internasional yang valid, karakter non-ASCII dikodekan dengan punycode (misalnya,
münchen.demenjadixn--mnchen-3ya.de). Nama host yang bukan IDN yang valid mungkin dikembalikan as-is dan menyertakan karakter non-ASCII. - Untuk alamat IPv6: Mengembalikan alamat tanpa tanda kurung di sekitarnya, dan menyertakan ID zona (cakupan) jika ditentukan (misalnya,
::1ataufe80::1%18). - Untuk alamat IPv4: Mengembalikan notasi desimal putus-putus (misalnya,
192.168.1.1).
IdnHost adalah alternatif yang disukai untuk properti warisan DnsSafeHost , karena perilakunya tidak bergantung pada pengaturan app.config dan dirancang untuk menghasilkan nilai yang cocok untuk resolusi DNS. Perhatikan bahwa untuk hasil IPv6 yang menyertakan ID zona, penelepon mungkin masih perlu menghapus ID zona sebelum meneruskan nilai ke API yang tidak menerimanya.
Jika Anda menggunakan string escaped untuk membuat instans ini (misalnya, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), maka IdnHost mengembalikan string yang diloloskan. Anda harus membatalkan untai (karakter) yang di-escape yang dikembalikan dari IdnHost sebelum menggunakan string tersebut untuk resolusi DNS. Ketahuilah bahwa jika Anda menggunakan unescaped string yang tidak valid untuk membuat instans ini (misalnya, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), maka IdnHost mengembalikan string yang tidak diescaped.