Sau*_*hra 89
是的布兰登绝对是正确的,用外行的话说
权限=主机名+端口号
如果URL协议使用默认端口,例如对于http URL使用端口80,那么只有在这种情况下,Authority = Host Name(端口号假定为80),
主机名是域名或IP地址
例:
http://www.example.com/
Authority = www.example.com
主机名= www.example.com
http://255.255.255.255:8080/
Authority = 255.255.255.255:8080
主机名= 255.255.255.255
Ste*_*ger 11
对于.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));
Run Code Online (Sandbox Code Playgroud)
不只是主机和端口号.
例如,以下是有效的URI:
http://user:password@host:80/path
Run Code Online (Sandbox Code Playgroud)
管理局是
user:password@host:80
Run Code Online (Sandbox Code Playgroud)
at符号(@)分隔来自主机的用户信息,冒号(:)从端口号分隔主机.在用户信息中,冒号(:)用于从密码中分隔用户名.(是的,我知道密码部分已弃用.可能仍然可以选择支持.)
这是管理局的完整规范.显然,用户信息和端口号通常不存在.
.NET中的Uri类在返回权限时丢弃了用户信息,这很烦人,因为它不正确.相反,您可以在UserInfo属性中找到用户信息:
Uri.UserInfo
Run Code Online (Sandbox Code Playgroud)
对于.NET Uri类,其他答案在技术上是正确的,Uri.Authority和Uri.Host之间的区别在于主机不包含端口号.
但请注意,在.NET Uri类中使用它的方式没有正确定义,因为它也可能包含用户信息.
每个HTTP URL都符合通用URI的语法。URI通用语法由五个组成部分的层次结构序列组成:
URI = scheme:[//authority]path[?query][#fragment]
Run Code Online (Sandbox Code Playgroud)
其中授权组件分为三个子组件:
authority = [userinfo@]host[:port]
Run Code Online (Sandbox Code Playgroud)
像这样:
可选的授权组件,前面带有两个斜杠(//),包括:
有关更多详细信息,您可以参考https://en.wikipedia.org/wiki/URL。