Uri.Host和Uri.Authority有什么区别?
System.Uri
具有Host
, Authority
和DnsSafeHost
。 MS提供了一个很好的例子,当Host
和DnsSafeHost
在这里是不同的。
我想要一个类似的例子/对Host
和Authority
解释。
是的,从外行的angular度来说,布兰登是绝对正确的
权限=主机名+端口号
如果URL协议使用的是默认端口,那么说80端口为http URL,那么只有在这种情况下Authority = Host Name(端口号假设为80),
而主机名称是域名或IP地址
例:
-
http://www.example.com/
Authority = http://www.example.com
主机名= http://www.example.com -
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节
- 用户信息
- 主办
- 端口号。
不只是主机和端口号。
例如,以下是一个有效的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