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

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

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

Исключения

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

Примеры

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

// 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 свойство задается, если он был указан при создании этого экземпляра.

Если вы использовали escape-строку для создания этого экземпляра (например, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), dnsSafeHost возвращает экранированную строку. Отмените экранированную строку, возвращаемую 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. Имена Punycode содержат только символы ASCII и всегда начинаются с префикса xn-- . Причина этого заключается в поддержке существующих DNS-серверов в Интернете, так как большинство DNS-серверов поддерживают только символы ASCII (см. RFC 3940).

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

В зависимости от используемых DNS-серверов можно использовать три возможных значения идентификаторов:

  • idn включено = Все

    Это значение преобразует любые доменные имена Юникода в эквиваленты Punycode (имена IDN).

  • idn включено = ВсеКромеИнтранета

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

  • idn включен = Нет

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

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

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

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