Uri.IdnHost Egenskap

Definition

Hämtar RFC 3490-kompatibelt internationellt domännamn för värden med punycode efter behov. Den här strängen är säker att använda för DNS-matchning efter att den inte har kapslades om det behövs.

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

Egenskapsvärde

Värdnamnet, formaterat med Punycode enligt IDN-standarden.

Undantag

Den här instansen representerar en relativ URI och den här egenskapen är endast giltig för absoluta URI:er.

Exempel

I följande exempel visas hur Host och IdnHost skiljer sig mellan DNS-, IDN-, IPv4- och IPv6-indata:

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

Kommentarer

Den här egenskapen tillhandahålls för användning av nätverksprotokoll på lägre nivå som kräver domännamnet i Punycode-format. Om koden inte kräver det specifika formatet använder du Host för värdnamnet.

Värdet som returneras av den här egenskapen beror på värdtypen:

  • För DNS-värdnamn: För giltiga internationella domännamn är icke-ASCII-tecken punycode-kodade (till exempel münchen.de blir xn--mnchen-3ya.de). Värdnamn som inte är giltiga IDN:er kan returneras as-is och innehålla icke-ASCII-tecken.
  • För IPv6-adresser: Returnerar adressen utan omgivande hakparenteser och innehåller zon-ID (omfång) om en har angetts (till exempel ::1 eller fe80::1%18).
  • För IPv4-adresser: Returnerar notationen dotted-decimal (till exempel 192.168.1.1).

IdnHost är det föredragna alternativet till den äldre DnsSafeHost egenskapen, eftersom dess beteende inte beror på app.config inställningar och är utformat för att skapa ett värde som lämpar sig för DNS-matchning. Observera att för IPv6-resultat som innehåller ett zon-ID kan anropare fortfarande behöva ta bort zon-ID:t innan de skickar värdet till API:er som inte accepterar det.

Om du använde en undantagen sträng för att konstruera den här instansen (till exempel "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), returnerar IdnHost en undantagen sträng. Du bör ta bort alla undantagna strängar som returneras från IdnHost innan du använder strängen för DNS-matchning. Tänk på att om du använde en ogiltig icke kapslade sträng för att konstruera den här instansen (till exempel "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), returnerar IdnHost en ofrånkomlig sträng.

Gäller för