主机与DnsSafeHost
我需要将主机从Request对象中取出。 我应该使用哪个属性,为什么?
来自MSDN:
Uri.DnsSafeHost属性
包含适用于DNSparsing的URI的非转义主机部分的string; 或者原始的非转义主机string,如果它已经适合parsing。
VS
Uri.Host属性
包含主机名的string。 这通常是服务器的DNS主机名或IP地址。
我的testing已经与ASP.NET开发服务器。 这两个总是返回localhost
。 即使我把127.0.0.1,都返回localhost
。
阅读, DnsSafeHost
属性将处理IPv6地址,以及如果需要Unicode到ASCII转换。 它也可以解释IRI和IDN。 即使我目前不关心这些事情,我应该只使用DnsSafeHost
属性来保证安全吗?
如果您打算将生成的主机名称自行发送到DNS服务器,请将DnsSafeHost应用于URL。 DNS最初是一个只有ASCII的协议( 在那里是一个ASCII 子集 )。 当前URL允许URL的主机部分中的字符序列不能直接发送到DNS服务器。 例子是:
-
括号内的IPv6地址 。 DnsSafeHost删除括号。
-
非ASCII,非英文域名。 DnsSafeHost(可选)使用RFC 3987 IRI规范化字符,并将非ASCII字符转换为IDN ( Punycode编码)。
-
谁知道未来哪些url将允许? 该应用程序可能会超过我们的假设什么是好的一个URL。 DnsSafeHost增加了一定程度的韧性。
如果需要向用户显示主机名称,请改用主机属性。