如果你在立即模式下运行,你会得到
new Uri("http://site.com?a=1&b=c%26d").AbsoluteUri
RES
"http://site.com/?a=1&b=c%26d"
但是
new Uri("http://site.com?a=1&b=c%26d").ToString() //string.format i believe doesn't need .ToString()
给我
"http://site.com/?a=1&b=c&d"
b值完全被破坏。我感到震惊。我永远不会使用ToString()
吗?这似乎是一个错误。但是写这个问题给了我答案(.AbsoluteUri
)。但也许这会对某人有所帮助。
答案 0 :(得分:3)
除了以人性化的方式显示URI之外,Uri.ToString
方法无用。
来自documentation for Uri.ToString的代码示例:
// The following outputs "http://www.contoso.com/thick and thin.htm".
Console.WriteLine(uriAddress.ToString());
// The following outputs "HTTP://www.Contoso.com:80/thick%20and%20thin.htm".
Console.WriteLine(uriAddress.OriginalString);
该示例显示ToString
方法返回带空格的字符串,该字符串不是URI中有效的字符。 Uri的字符串表示显然不打算用作实际的URI。或许应该在文档中更清楚地说明这一事实。
答案 1 :(得分:-1)
修改强>
我最初忽略了这样一个事实:没有逃脱将有助于'&'在@ acidzombie24的例子中的符号。 如果可以,我会低估我的答案;-P。由于我不能,我已相应地编辑
请注意,Uri.EscapeUriString Method
在@ acidzombie24的情况下无效,尽管来自MSDN的这句话:
使用EscapeUriString方法准备未转义的URI字符串 是Uri构造函数的参数。
文档实际上暗示了方法的局限性:
[Uri.EscapeUriString(stringToEscape)]方法假定stringToEscape中没有转义序列。
编辑2
我试图在针对4.5的VS2012 WinForms应用程序中复制@ acidzombie24的示例,但是
new Uri("http://site.com?a=1&b=c%26d").ToString()
返回了转义版本: