115 votes

Quelle est la différence entre Uri.ToString() et Uri.AbsoluteUri ?

En commentaire à une question Azure tout à l'heure, @smarx a noté

Je pense qu'il est généralement préférable de faire blob.Uri.AbsoluteUri que blob.Uri.ToString().

Y a-t-il une raison à cela? La documentation pour Uri.AbsoluteUri note qu'elle " obtient l'URI absolu ", Uri.ToString() " obtient une représentation de chaîne canonique pour l'instance spécifiée ".

130voto

Ofer Zelig Points 8595

Donné par exemple :

 UriBuilder builder = new UriBuilder("http://somehost/somepath");
builder.Query = "somekey=" + HttpUtility.UrlEncode("some+value");
Uri someUri = builder.Uri;

Dans ce cas, Uri.ToString() renverra une URL lisible par l'homme : http://somehost/somepath?somekey=some+value

Uri.AbsoluteUri d'autre part renverra le formulaire codé comme HttpUtility.UrlEncode l'a renvoyé : http://somehost/somepath?somekey=some%2bvalue

35voto

ordag Points 500

De plus: Si Uri est un proche Uri AbsoluteUri échouera, ToString() non.

 Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string str1 = uri.ToString(); // "fuu/bar.xyz"
string str2 = uri.AbsoluteUri; // InvalidOperationException

5voto

Rohit Points 2629

Pourquoi ne pas vérifier et utiliser le bon ?

 string GetUrl(Uri uri) => uri?.IsAbsoluteUri == true ? uri?.AbsoluteUri : uri?.ToString();

4voto

G. Stoynev Points 1733

Puisque tout le monde semble penser que uri.AbsoluteUri est meilleur, mais parce qu'il échoue avec les chemins relatifs, alors la méthode universelle serait probablement :

 Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string notCorruptUri = Uri.EscapeUriString(uri.ToString());

-1voto

AKMDD Ken Points 1

L'exemple suivant écrit le contenu complet de l'instance Uri dans la console. Dans l'exemple illustré,

http://www.cartechnewz.com/catalog/shownew.htm?date=today

est écrit sur la console.

 Uri baseUri = new Uri("http://www.cartechnewz.com");
Uri myUri = new Uri(baseUri, "catalog/shownew.htm?date=today");
Console.WriteLine(myUri.AbsoluteUri);

La propriété AbsoluteUri inclut l'URI entier stocké dans l'instance Uri, y compris tous les fragments et les chaînes de requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X