Quelle est la différence entre Uri.Hôte et Uri.Autorité
System.Uri
a Host
, Authority
, et DnsSafeHost
. MS fournit un bon exemple lorsque Host
et DnsSafeHost
sont différents ici.
Je voudrais un exemple/explication similaire pour Host
et Authority
.
5 réponses
Oui Brandon est tout à fait correct, en termes profanes
Autorité = Nom D'Hôte + Numéro De Port
Et si le protocole URL utilise un port par défaut, disons le port 80 pour l'URL http, alors seulement dans ce cas Authority = nom D'hôte (le Port No est supposé être 80),
Alors que le nom D'hôte est un nom de domaine ou une adresse IP
Exemple:
-
http://www.example.com/
l'Autorité = www.example.com
Nom d'Hôte = www.example.com -
http://255.255.255.255:8080/
L'Autorité = 255.255.255.255:8080
Nom D'Hôte = 255.255.255.255
Depuis MSDN URI.Accueil page.
Contrairement à la propriété Authority, cette valeur de propriété n'inclut pas le numéro de port.
Selon la documentation à laquelle vous avez lié, la propriété Authority
inclura le numéro de port s'il n'est pas le même que le port par défaut de L'Uri, tandis que la propriété Host
ne retournera que le nom d'hôte DNS ou L'adresse IP.
Je ne crois pas qu'il y ait plus de différences que cela.
Pour la classe Uri dans. NET, Authority inclut le port, Host ne le fait pas et ne comprend pas non plus les informations utilisateur.
Quelques exemples d'URI valides:
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));
Selon RFC3986, la Section 3.2 l'Autorité contient
- Informations Utilisateur
- hôte
- Numéro de Port.
Pas seulement l'hôte et le numéro de port.
Par exemple, ce qui suit est un URI valide:
http://user:password@host:80/path
Dans lequel l'Autorité est
user:password@host:80
Le symbole at ( @ ) délimite les informations utilisateur de l'hôte et les deux points (:) délimitent l'hôte du numéro de port. Dans les informations utilisateur, un deux-points (:) délimite le nom d'utilisateur du mot de passe. (Oui, je sais que la partie du mot de passe est obsolète. Il peut encore éventuellement être pris en charge.)
Ceci est la spécification complète pour une autorité. Évidemment, les informations utilisateur et le numéro de port ne sont souvent pas présents.
La classe Uri dans. NET supprime les informations utilisateur lorsque renvoyer l'autorité ce qui est plutôt ennuyeux parce que ce n'est pas correct. Au lieu de cela, vous pouvez trouver les informations utilisateur dans la propriété UserInfo:
Uri.UserInfo
D'autres réponses sont techniquement correctes pour dire que pour la classe Uri. net que la différence entre Uri.De l'autorité et de l'Uri.Host est que l'hôte ne contiendra pas de numéro de port.
Mais sachez que l'Autorité N'est pas correctement définie comme elle est utilisée dans la classe. net Uri car elle peut aussi contient des informations utilisateur.
L'Autorité peut également inclure un nom d'utilisateur et un mot de passe, par exemple
Bob:pwd@somewhere.example.com
Plus couramment utilisé pour les URI FTP