What's the difference between Uri.ToString() and Uri.AbsoluteUri?

前端 未结 5 895
情书的邮戳
情书的邮戳 2020-12-14 13:43

As a comment to an Azure question just now, @smarx noted

I think it\'s generally better to do blob.Uri.AbsoluteUri than blob.Uri.ToString().

相关标签:
5条回答
  • 2020-12-14 14:08

    Since everybody seems to think that uri.AbsoluteUri is better, but because it fails with relative paths, then probably the universal way would be:

    Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
    string notCorruptUri = Uri.EscapeUriString(uri.ToString());
    
    0 讨论(0)
  • 2020-12-14 14:12

    The following example writes the complete contents of the Uri instance to the console. In the example shown,

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

    is written to the console.

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

    The AbsoluteUri property includes the entire URI stored in the Uri instance, including all fragments and query strings.

    0 讨论(0)
  • 2020-12-14 14:21

    Why not check and use the correct one?

    string GetUrl(Uri uri) => uri?.IsAbsoluteUri == true ? uri?.AbsoluteUri : uri?.ToString();
    
    0 讨论(0)
  • 2020-12-14 14:27

    Additionally: If your Uri is a relative Uri AbsoluteUri will fail, ToString() not.

    Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
    string str1 = uri.ToString(); // "fuu/bar.xyz"
    string str2 = uri.AbsoluteUri; // InvalidOperationException
    
    0 讨论(0)
  • 2020-12-14 14:34

    Given for example:

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

    In this case, Uri.ToString() will return a human-readable URL: http://somehost/somepath?somekey=some+value

    Uri.AbsoluteUri on the other hand will return the encoded form as HttpUtility.UrlEncode returned it: http://somehost/somepath?somekey=some%2bvalue

    0 讨论(0)
提交回复
热议问题