Uri.Host和Uri.Authority有什么区别?

System.Uri具有HostAuthorityDnsSafeHost 。 MS提供了一个很好的例子,当HostDnsSafeHost在这里是不同的。

我想要一个类似的例子/对HostAuthority解释。

是的,从外行的angular度来说,布兰登是绝对正确的

权限=主机名+端口号

如果URL协议使用的是默认端口,那么说80端口为http URL,那么只有在这种情况下Authority = Host Name(端口号假设为80),

而主机名称是域名或IP地址

例:

  1. http://www.example.com/

    Authority = http://www.example.com
    主机名= http://www.example.com

  2. http://255.255.255.255:8080/

    权威= 255.255.255.255:8080
    主机名= 255.255.255.255

从MSDN的URI.Host页面。

与Authority属性不同,此属性值不包含端口号。

根据您链接到的文档, Authority属性将包含与Uri的默认端口不同的端口号,而Host属性将只返回DNS主机名或IP地址。

我不相信有更多的差异。

对于.NET中的Uri类,Authority包含端口,Host不包含,也不包含用户信息。

有效的URI的一些例子:

 Uri u = new Uri("http://www.domain.com/path"); Assert.AreEqual("www.domain.com", u.Authority); Assert.AreEqual("www.domain.com", u.Host); Assert.AreEqual("http://www.domain.com", u.GetLeftPart(UriPartial.Authority)); u = new Uri("http://www.domain.com:8080/path"); Assert.AreEqual("www.domain.com:8080", u.Authority); Assert.AreEqual("www.domain.com", u.Host); Assert.AreEqual("http://www.domain.com:8080", u.GetLeftPart(UriPartial.Authority)); u = new Uri("http://user:password@host:555/path"); Assert.AreEqual("host:555", u.Authority); Assert.AreEqual("host", u.Host); Assert.AreEqual("http://user:password@host:555", u.GetLeftPart(UriPartial.Authority)); 

根据RFC3986 ,pipe理局包含第3.2节

  1. 用户信息
  2. 主办
  3. 端口号。

不只是主机和端口号。

例如,以下是一个有效的URI:

 http://user:password@host:80/path 

其中pipe理局是

 user:password@host:80 

at符号(@)从主机分隔用户信息,冒号(:)从端口号分隔主机。 在用户信息中,冒号(:)从密码分隔用户名。 (是的,我知道密码部分已被弃用,仍然可以select支持)。

这是一个权威机构的完整规范。 显然,用户信息和端口号通常不存在。

.NET中Uri类在返回Authority时会丢弃用户信息 ,因为这是不正确的。 相反,您可以在UserInfo属性中find用户信息:

 Uri.UserInfo 

其他答案在技术上是正确的说, 对于.NET Uri类 ,Uri.Authority和Uri.Host之间的区别是主机不包含端口号。

但请知道, 权威没有正确定义它在.NET Uri类中使用的方式,因为它也可能包含用户信息。

权威还可以包括一个用户名和密码,例如

鲍勃:pwd@somewhere.example.com

更常用于FTP URI