Uri.ToString()和Uri.AbsoluteUri的区别是什么?
本文关键字:Uri 区别 是什么 ToString AbsoluteUri | 更新日期: 2023-09-27 18:10:09
作为刚才Azure问题的评论,@smarx注意到
我认为通常使用blob.Uri.AbsoluteUri比blob.Uri.ToString () .
这有什么原因吗?Uri.AbsoluteUri
的文档指出它"获取绝对URI",Uri.ToString()
"获取指定实例的规范字符串表示形式"。
举例:
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
将返回作为httutility的编码形式。UrlEncode返回它:http://somehost/somepath?somekey=some%2bvalue
另外:如果您的Uri
是相对 Uri
AbsoluteUri
将失败,ToString()
不会。
Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string str1 = uri.ToString(); // "fuu/bar.xyz"
string str2 = uri.AbsoluteUri; // InvalidOperationException
为什么不检查并使用正确的?
string GetUrl(Uri uri) => uri?.IsAbsoluteUri == true ? uri?.AbsoluteUri : uri?.ToString();
既然每个人似乎都认为uri.AbsoluteUri
更好,但因为它在相对路径上失败了,那么可能通用的方法是:
Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string notCorruptUri = Uri.EscapeUriString(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,包括所有片段和查询字符串。