主机与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增加了一定程度的韧性。

如果需要向用户显示主机名称,请改用主机属性。