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, требуются следующие два изменения:
Добавьте следующую строку в файлmachine.config в каталоге .NET Framework 2.0:
\<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />Укажите, следует ли применять синтаксический анализ международного доменного имени (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 класса.