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 = 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, требуются следующие два изменения:
Добавьте следующую строку в файл 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. Имена 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 разделе "Примечания" для класса.