Uri.DnsSafeHost 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获得可安全用于 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 实例。 它说明了从 Host中返回的值之间的差异,该值返回 URI 中指定的主机名或地址,以及从 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"
,) ,则 DnsSafeHost 返回转义字符串。 使用 DNS 解析之前返回 DnsSafeHost
的任何转义字符串 (请参阅示例) 。 如果使用无效的未转义字符串构造此实例 (例如,“http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm”) ,则 DnsSafeHost 返回一个未转义字符串。
该DnsSafeHost属性依赖于.NET Framework应用中的配置设置,如本主题后面部分所述。 该 IdnHost 属性作为使用 DnsSafeHost的首选替代方法提供,因为 IdnHost 保证始终是 DNS 安全。
该DnsSafeHost属性在 .NET Framework v3.5、3.0 SP1 和 2.0 SP1 中扩展,以基于 RFC 3987 提供国际资源标识符 (IRI) 支持。 但是,为了确保应用程序与早期版本的兼容性,必须在.NET Framework应用中专门启用它。 若要启用对 IRI 的支持,需进行以下两项更改:
将以下行添加到 .NET Framework 2.0 目录下的 machine.config 文件:
\<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 会将域名中的所有 Unicode 标签转换为其 Punycode 等效项。 Punycode 名称只包含 ASCII 字符,并且始终以 xn-- 前缀开头。 这样是为了支持 Internet 上的 DNS 服务器,因为大部分 DNS 服务器仅支持 ASCII 字符(参见 RFC 3940)。
启用 IDN 只会影响 DnsSafeHost 属性值。
根据所用的 DNS 服务器,IDN 有三个可能的值:
idn enabled = All
此值会将所有 Unicode 域名转换为它们的 Punycode 等效项(IDN 名称)。
idn enabled = AllExceptIntranet
此值会将所有外部 Unicode 域名转换为使用 Punycode 等效项(IDN 名称)。 在这种情况下,若要处理本地 Intranet 上的国际化名称,用于 Intranet 的 DNS 服务器应该支持 Unicode 名称。
idn enabled = None
此值不会将任何 Unicode 域名转换为使用 Punycode。 这是默认值,与 .NET Framework 2.0 行为一致。
启用 IRI 分析 (已启用 iriParsing = true
) 根据 RFC 3987 中的 IRI 规则规范化和检查字符。 默认值根据 false
RFC 2396 和 RFC 2732 (iPv6 文本) 规范化和检查字符。
有关 IRI 支持的详细信息,请参阅类的 Uri “备注”部分。