作为对Azure问题的评论,@ smarx指出
我认为做blob.Uri.AbsoluteUri通常比blob.Uri.ToString()更好。
是否有一个原因?的文档Uri.AbsoluteUri说明“它获取绝对URI”,Uri.ToString()“获取指定实例的规范字符串表示形式”。
Answers:
例如:
UriBuilder builder = new UriBuilder("http://somehost/somepath");
builder.Query = "somekey=" + HttpUtility.UrlEncode("some+value");
Uri someUri = builder.Uri;
在这种情况下,
Uri.ToString()将返回人类可读的URL:http:// somehost / somepath?somekey = some + value
Uri.AbsoluteUri 另一方面将返回编码形式为HttpUtility.UrlEncode返回它: http://somehost/somepath?somekey=some%2bvalue
为什么不检查并使用正确的?
string GetUrl(Uri uri) => uri?.IsAbsoluteUri == true ? uri?.AbsoluteUri : uri?.ToString();
以下示例将Uri实例的完整内容写入控制台。在所示的示例中,
http://www.cartechnewz.com/catalog/shownew.htm?date=today
被写入控制台。
Uri baseUri = new Uri("http://www.cartechnewz.com");
Uri myUri = new Uri(baseUri, "catalog/shownew.htm?date=today");
Console.WriteLine(myUri.AbsoluteUri);
AbsoluteUri属性包括存储在Uri实例中的整个URI,包括所有片段和查询字符串。