我需要让主机脱离Request对象。我应该使用哪个属性?为什么?
来自MSDN:
Uri.DnsSafeHost属性
包含未转义的字符串 托管适合的URI的一部分 用于DNS解析;或原件 未转义的主机字符串,如果是的话 已经适合解决。
VS
Uri.Host Property
包含主机名的String。 这通常是DNS主机名或 服务器的IP地址。
我的测试是使用ASP.NET Development Server。这两个都始终返回localhost
。即使我输入127.0.0.1,两者都返回localhost
。
阅读时,如果需要,DnsSafeHost
属性将处理IPv6地址以及Unicode到ASCII转换。它还可以解释IRI和IDN。即使我现在不关心这些事情,我应该只使用DnsSafeHost
属性来保证安全吗?
答案 0 :(得分:45)
如果您打算将生成的主机名自行发送到DNS服务器,请将 DnsSafeHost 应用于该URL。 DNS最初是一种纯ASCII协议(and a subset of ASCII at that)。当前URL允许URL的主机部分中的字符序列无法直接发送到DNS服务器。例如:
bracket-enclosed IPv6 addresses。 DnsSafeHost放下括号。
非ASCII,非英文域名。 DnsSafeHost(可选)使用RFC 3987 IRI来标准化字符,并将非ASCII字符转换为IDN,Punycode编码。
谁知道将来会允许哪些网址?该应用程序可能比我们对URL中的正常情况的假设更长久。 DnsSafeHost在那里增加了一定程度的弹性。
如果您需要向用户显示主机名,请改用 Host 属性。