System.Uri
ma Host
, Authority
i DnsSafeHost
. MS stanowi dobry przykład tego, kiedy Host
i DnsSafeHost
są tutaj różne .
Chciałbym mieć podobny przykład / wyjaśnienie dla Host
i Authority
.
Tak, Brandon ma całkowitą rację, w kategoriach laika
Urząd = nazwa hosta + numer portu
A jeśli protokół URL używa domyślnego portu, powiedzmy port 80 dla adresu URL http, to tylko w tym przypadku Urząd = Nazwa hosta (przyjmuje się, że numer portu to 80),
Natomiast nazwa hosta to nazwa domeny lub adres IP
Przykład:
http://www.example.com/
Authority = www.example.com
Host Name = www.example.com
http://255.255.255.255:8080/
Urząd = 255.255.255.255:8080
Nazwa hosta = 255.255.255.255
User Information
części.Ze strony MSDN URI.Host .
źródło
Każdy adres URL HTTP jest zgodny ze składnią ogólnego identyfikatora URI. Ogólna składnia identyfikatora URI składa się z hierarchicznej sekwencji pięciu składników:
URI = scheme:[//authority]path[?query][#fragment]
gdzie komponent autorytetu dzieli się na trzy podkomponenty:
Lubię to:
Opcjonalny komponent autorytetu poprzedzony dwoma ukośnikami (//), zawierający:
Więcej informacji można znaleźć pod adresem https://en.wikipedia.org/wiki/URL .
źródło
W przypadku klasy Uri w platformie .NET Urząd obejmuje port, a Host nie zawiera informacji o użytkowniku.
Kilka przykładów prawidłowych identyfikatorów 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));
Zgodnie z RFC3986 , sekcja 3.2 Urząd zawiera
NIE tylko numer hosta i portu.
Na przykład poniżej przedstawiono prawidłowy identyfikator URI:
http://user:password@host:80/path
w którym znajduje się Urząd
user:password@host:80
Symbol at (@) oddziela informacje o użytkowniku z hosta, a dwukropek (:) oddziela hosta od numeru portu. W informacjach o użytkowniku, dwukropek (:) oddziela nazwę użytkownika od hasła. (Tak, wiem, że część hasła jest przestarzała. Opcjonalnie może być nadal obsługiwana).
To jest pełna specyfikacja organu. Oczywiście informacje o użytkowniku i numer portu często nie są obecne.
Klasa Uri .NET spada informacji użytkownika po powrocie organu, który jest dość irytujące, ponieważ nie jest prawidłowe. Zamiast tego możesz znaleźć informacje o użytkowniku we właściwości UserInfo:
Inne odpowiedzi są technicznie poprawne, jeśli chodzi o klasę .NET Uri różnica między Uri.Authority i Uri.Host polega na tym, że host nie będzie zawierał numeru portu.
Należy jednak pamiętać, że uprawnienia nie są odpowiednio zdefiniowane w sposób, w jaki są używane w klasie .NET Uri, ponieważ mogą również zawierać informacje o użytkowniku.
źródło
Zgodnie z dokumentacją, z którą utworzyłeś łącze,
Authority
właściwość będzie zawierać numer portu, jeśli nie jest taki sam jak domyślny port Uri, aHost
właściwość zwróci tylko nazwę hosta DNS lub adres IP.Nie sądzę, żeby było więcej różnic niż to.
źródło
Uprawnienie może również zawierać nazwę użytkownika i hasło, np
bob: [email protected]
częściej używany dla identyfikatorów URI FTP
źródło