1

当我发现 Uri tostring 打破了 uris 时,这让我大吃一惊。这是一个例子

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

new Uri("http://site.com?a=1&b=c%26d").AbsoluteUri

水库

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

4

2 回答 2

3

Uri.ToString除了以人类友好的方式显示 URI 之外,该方法对其他任何事情都没有用。

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。这个事实也许应该在文档中更清楚地说明。

于 2012-10-20T19:42:11.853 回答
-1

编辑

我最初忽略了这样一个事实,即在@acidzombie24 的示例中,没有转义将有助于使用“&”符号。如果可以的话,我会否决我的答案;-P。由于我不能,我已相应地对其进行了编辑


请注意,这Uri.EscapeUriString Method对@acidzombie24 的情况无济于事,尽管 MSDN 中有这句话:

使用 EscapeUriString 方法准备一个未转义的 URI 字符串作为 Uri 构造函数的参数。

该文档实际上暗示了方法的局限性:

[Uri.EscapeUriString(stringToEscape)] method assumes that stringToEscape has no escape sequences in it.


EDIT 2 I tried to duplicate @acidzombie24's example in VS2012 WinForms app targeting 4.5, but new Uri("http://site.com?a=1&b=c%26d").ToString() returned the escaped version: enter image description here

于 2013-03-14T20:02:52.897 回答