Для класса Uri в .NET 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 , Разделом 3.2 Орган содержит
- Информация о пользователе
- Хост
- Номер порта.
НЕ только хост и номер порта.
Например, следующий действительный URI:
http://user:password@host:80/path
, в котором Органом является
user:password@host:80
Символ at (@) отделяет информацию пользователя от хоста, а двоеточие (:) отделяет хост от номера порта. В пользовательской информации двоеточие (:) отделяет имя пользователя от пароля. (Да, я знаю, что часть пароля устарела. Она все еще может поддерживаться.)
Это полная спецификация для Органа. Очевидно, что информация о пользователе и номер порта часто отсутствуют.
Класс Uri в .NET отбрасывает информацию пользователя при возврате полномочий, что довольно раздражает, потому что это не правильно. Вместо этого вы можете найти информацию о пользователе в свойстве UserInfo:
Uri.UserInfo
Другими технически правильными являются ответы: для класса .NET Uri , что разница между Uri.Authority и Uri.Host заключается в том, что хост не будет содержать номер порта. .
Но, пожалуйста, знайте, что Полномочия определены неправильно, как он используется в классе .NET Uri , поскольку он также может содержать информацию о пользователе.