Uri.DnsSafeHost Свойство

Определение

Возвращает имя узла, которое после преобразования в неэкранированную форму, если это необходимо, можно безопасно использовать для разрешения DNS.

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

Значение свойства

String

Ведущая часть URI в формате, подходящем для разрешения DNS; или исходная строка узла, если она уже подходит для разрешения.

Исключения

Этот экземпляр представляет относительный URI, а это свойство допустимо использовать только для абсолютных URI.

Примеры

В следующем примере создается Uri экземпляр из строки. Он иллюстрирует разницу между возвращаемым значением, которое возвращает имя узла или адрес, указанный в универсальном коде ресурса (URI), и значение, возвращенное Hostиз DnsSafeHostнего, которое возвращает адрес, безопасный для использования в разрешении DNS.

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

Как описано в примечаниях, перед разрешением не укажите имя узла. Метод можно использовать для UnescapeDataString отмены имени узла, и его можно разрешить, вызвав GetHostEntry метод.

Комментарии

Для IPv6-адресов скобки ([]) удаляются и ScopeId свойство задается, если он был указан при создании этого экземпляра.

Если для создания этого экземпляра (например, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"используется escape-строка), dnsSafeHost возвращает escape-строку. Отмените экранированную строку, возвращенную DnsSafeHost перед использованием этой строки для разрешения DNS (см. пример). Если для создания этого экземпляра используется недопустимая строка (например, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), то DnsSafeHost возвращает нераспакованную строку.

Свойство DnsSafeHost зависит от параметров конфигурации в приложениях платформа .NET Framework, как описано далее в этом разделе. Свойство IdnHost предоставляется в качестве предпочтительной альтернативы использованию DnsSafeHost, так как IdnHost гарантируется всегда быть безопасным DNS.

Свойство DnsSafeHost было расширено в платформа .NET Framework версии 3.5, 3.0 с пакетом обновления 1 (SP1) и 2.0 с пакетом обновления 1 (SP1) для предоставления поддержки международного идентификатора ресурсов (IRI) на основе RFC 3987. Однако для обеспечения совместимости приложений с предыдущими версиями необходимо специально включить его в приложениях платформа .NET Framework. Чтобы включить поддержку IRI, требуются следующие два изменения:

  1. Добавьте следующую строку в файл machine.config в каталоге платформа .NET Framework 2.0:

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

  2. Укажите, следует ли применять синтаксический анализ международного доменного имени (IDN) к доменному имени и следует ли применять правила синтаксического анализа IRI. Это можно сделать в machine.config или в файлеapp.config . Например, добавьте следующее:

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

Включение IDN преобразует все метки Юникода в доменное имя в эквиваленты Punycode. Имена Punicode содержат только символы ASCII и всегда начинаются с префикса "xn--". Это сделано для того, чтобы поддерживать существующие DNS-серверы в интрасети, так как большинство DNS-серверов поддерживает только символы ASCII (см. RFC 3940).

Включение IDN влияет только на значение DnsSafeHost свойства.

Существует три возможных значения idN в зависимости от используемых DNS-серверов:

  • idn enabled = All

    При этом значении имена доменов из Юникода будут преобразовываться в их эквиваленты в Punycode (IDN-имена).

  • idn enabled = AllExceptIntranet

    При этом значении имена всех внешних доменов из Юникода будут преобразовываться в их эквиваленты в Punycode (IDN-имена). В этом случае, чтобы обрабатывать международные имена в локальной интрасети, DNS-серверы, которые используются для интрасети, должны поддерживать имена в Юникоде.

  • idn enabled = None

    При этом значении имена доменов в Юникоде не будут преобразовываться в их эквиваленты в Punycode. Это значение по умолчанию, которое согласуется с поведением платформа .NET Framework 2.0.

Включение синтаксического анализа IRI (iriParsing enabled = true) нормализует и проверяет символы в соответствии с правилами IRI в RFC 3987. Значение по умолчанию — это false нормализация и проверка символов в соответствии с RFC 2396 и RFC 2732 (для литералом IPv6).

Дополнительные сведения о поддержке IRI см. в Uri разделе "Примечания" для класса.

Применяется к