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

Bri*_*ian 74 .net c# uri

System.UriHost,AuthorityDnsSafeHost.MS提供时的一个很好的例子Host,并DnsSafeHost在不同的位置.

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

Sau*_*hra 89

是的布兰登绝对是正确的,用外行的话说

权限=主机名+端口号

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

主机名是域名或IP地址

例:

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

    Authority = www.example.com
    主机名= www.example.com

  2. http://255.255.255.255:8080/

    Authority = 255.255.255.255:8080
    主机名= 255.255.255.255


ker*_*vin 35

来自MSDN URI.Host页面.

与Authority属性不同,此属性值不包括端口号.


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)

根据RFC3986,管理局包含的第3.2节

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

不只是主机和端口号.

例如,以下是有效的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类中使用它的方式没有正确定义,因为它也可能包含用户信息.


Bra*_*don 10

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

我不相信有任何不同之处.


Fra*_*ang 7

每个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)

像这样:

网址语法

可选的授权组件,前面带有两个斜杠(//),包括:

  • 可选的userinfo子组件,可以由用户名和可选的密码组成,后跟冒号(:),后跟at符号(@)。出于安全原因,不建议在userinfo子组件中使用username:password格式。除非冒号之后的数据为空字符串(表示无密码),否则应用程序不应在userinfo子组件中第一个冒号(:)之后的任何数据均以明文形式呈现。
  • 可选的主机子组件,由注册名称(包括但不限于主机名)或IP地址组成。IPv4地址必须采用点分十进制格式,并且IPv6地址必须括在方括号([])中。
  • 可选的端口子组件,其前面带有冒号(:)。

有关更多详细信息,您可以参考https://en.wikipedia.org/wiki/URL