Uri ToStrings打破%26(&)

时间:2012-10-20 19:31:55

标签: .net uri

当我发现Uri tostring打破uris时,它引起了我的注意......这是一个例子

如果你在立即模式下运行,你会得到

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)。但也许这会对某人有所帮助。

2 个答案:

答案 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()返回了转义版本: enter image description here