System.Uri
有Host
,Authority
和DnsSafeHost
。MS在此处提供了何时Host
和DnsSafeHost
与众不同的一个很好的示例。
我想了一个类似的例子/解释Host
和Authority
。
Answers:
是的,从外行的角度来说,布兰登是绝对正确的
权限=主机名+端口号
并且如果URL协议使用默认端口,例如HTTP URL为端口80,则仅在那种情况下Authority =主机名(端口号假定为80),
主机名是域名或IP地址
例:
http://www.example.com/
权限= www.example.com
主机名= www.example.com
http://255.255.255.255:8080/
权限= 255.255.255.255:8080
主机名= 255.255.255.255
User Information
一部分。
从MSDN URI.Host页面。
与Authority属性不同,此属性值不包括端口号。
每个HTTP URL都符合通用URI的语法。URI通用语法包含五个组成部分的层次结构序列:
URI = scheme:[//authority]path[?query][#fragment]
其中授权组件分为三个子组件:
authority = [userinfo@]host[:port]
像这样:
可选的授权组件,其前面带有两个斜杠(//),包括:
有关更多详细信息,您可以参考https://en.wikipedia.org/wiki/URL。
对于.NET中的Uri类,授权包括端口,主机不包括端口,并且都不包括用户信息。
有效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));
不只是主机和端口号。
例如,以下是有效的URI:
http://user:password@host:80/path
管理局所在的地方
user:password@host:80
符号(@)分隔主机中的用户信息,冒号(:)分隔端口号中的主机。在用户信息中,用冒号(:)分隔用户名和密码。(是的,我知道密码部分已被弃用。仍然可以选择支持它。)
这是授权机构的完整规格。显然,用户信息和端口号通常不存在。
.NET中的Uri类在返回授权时会丢弃用户信息,这很烦人,因为它不正确。相反,您可以在UserInfo属性中找到用户信息:
Uri.UserInfo
其他答案在技术上是正确的,对于.NET Uri类来说,,Uri.Authority和Uri.Host之间的区别在于主机将不包含端口号。
但是请注意,在.NET Uri类中未正确定义Authority的使用方式,因为它可能还包含用户信息。
授权还可以包括用户名和密码,例如
bob:pwd@somewhere.example.com
更常用于FTP URI