System.Uri
имеет Host
, Authority
и DnsSafeHost
. MS дает хороший пример того, когда Host
и DnsSafeHost
отличаются здесь.
Мне нужен пример/объяснение для Host
и Authority
.
System.Uri
имеет Host
, Authority
и DnsSafeHost
. MS дает хороший пример того, когда Host
и DnsSafeHost
отличаются здесь.
Мне нужен пример/объяснение для Host
и Authority
.
Да Брэндон абсолютно прав, в условиях неспециалиста
Власть = имя хоста + порт
И если протокол URL использует порт по умолчанию, скажите порт 80 для http-адреса, тогда только в этом случае Authority = Host Name (Предполагается, что значение порта не равно 80),
В то время как имя хоста - это либо доменное имя, либо адрес I.P
Пример:
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
Из MSDN URI.Host страница.
В отличие от свойства Authority, это значение свойства не включает номер порта.
В соответствии с документацией, к которой вы привязались, свойство Authority
будет содержать номер порта, если это не то же самое, что и порт по умолчанию для Uri, тогда как свойство Host
будет возвращать только имя хоста DNS или IP-адрес Адрес.
Я не верю, что есть больше различий, чем это.
Для класса 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:[email protected]:555/path");
Assert.AreEqual("host:555", u.Authority);
Assert.AreEqual("host", u.Host);
Assert.AreEqual("http://user:[email protected]:555", u.GetLeftPart(UriPartial.Authority));
В соответствии с RFC3986, Раздел 3.2 Орган содержит
НЕ только хост и номер порта.
Например, следующее является допустимым URI:
http://user:[email protected]:80/path
в котором орган находится
user:[email protected]:80
Символ (@) отделяет информацию пользователя от хоста, а двоеточие (:) отделяет хост от номера порта. В пользовательской информации двоеточие (:) отделяет имя пользователя от пароля. (Да, я знаю, что часть пароля устарела. Она все еще может поддерживаться.)
Это полная спецификация для Органа. Очевидно, что информация о пользователе и номер порта часто отсутствуют.
Класс Uri в .NET сбрасывает пользовательскую информацию при возврате полномочий, что довольно раздражает, потому что это не правильно. Вместо этого вы можете найти информацию о пользователе в свойстве UserInfo:
Uri.UserInfo
Другие ответы технически правильны, если сказать, что для класса .NET Uri разница между Uri.Authority и Uri.Host заключается в том, что хост не будет содержать номер порта.
Но, пожалуйста, знайте, что Authority не определен должным образом, как он используется в классе .NET Uri, потому что он также может содержать информацию о пользователе.
Каждый HTTP URL соответствует синтаксису универсального URI. Общий синтаксис URI состоит из иерархической последовательности из пяти компонентов:
URI = scheme:[//authority]path[?query][#fragment]
где компонент полномочий делится на три подкомпонента:
authority = [[email protected]]host[:port]
Как это:
Необязательный компонент полномочий, которому предшествуют две косые черты (//), содержащие:
Для получения более подробной информации вы можете обратиться к https://en.wikipedia.org/wiki/URL.
Власть может также включать имя пользователя и пароль, например.
боб: [email protected]
более часто используется для FTP URI