Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Uri ToString中断%26(&;)_.net_Uri - Fatal编程技术网

.net Uri ToString中断%26(&;)

.net Uri ToString中断%26(&;),.net,uri,.net,Uri,当我发现Uri tostring破坏了Uri时,我真是大吃一惊。。。。这里有一个例子 如果你在即时模式下运行,你会得到 new Uri("http://site.com?a=1&b=c%26d").AbsoluteUri Res 但是 抓住我 "http://site.com/?a=1&b=c&d" b值完全被破坏。我很震惊。我是否从未使用过ToString()?这好像是一个错误。但是写这个问题给了我答案(.AbsoluteUri)。但是这可能会对某些人有所帮助。Ur

当我发现Uri tostring破坏了Uri时,我真是大吃一惊。。。。这里有一个例子

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

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

但是

抓住我

"http://site.com/?a=1&b=c&d"

b值完全被破坏。我很震惊。我是否从未使用过
ToString()
?这好像是一个错误。但是写这个问题给了我答案(
.AbsoluteUri
)。但是这可能会对某些人有所帮助。

Uri.ToString方法除了以人性化的方式显示Uri之外,对其他任何东西都没有用处

从上的代码示例:

该示例显示
ToString
方法返回一个带空格的字符串,该字符串在URI中不是有效字符。Uri的字符串表示显然不打算用作实际Uri。这一事实也许应该在文档中更清楚地说明。

编辑

我最初忽略了一个事实,即@acidzombie24示例中的“&”符号不会有任何转义。 如果可以的话,我会对我的答案投反对票-由于我不能,我已经相应地编辑了它


请注意,尽管MSDN中有这样一句话,但这对@acidzombie24的情况没有帮助:

使用EscapeUristing方法准备一个未转换的URI字符串以 是Uri构造函数的参数

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

[Uri.EscapeUriString(stringToEscape)]方法假定stringToEscape中没有转义序列


编辑2 我试图在VS2012 WinForms应用程序中复制@acidzombie24的示例,目标是4.5,但是
新Uri(“http://site.com?a=1&b=c%26d“”.ToString()
返回了转义版本:

可能是重复的我不知道,但是。除非你在寻找另一个答案,否则你应该发布并接受你的答案作为结束这个问题的答案。@Christian.K Guffa给出了一个奇妙的答案。比我只使用绝对值更好是的,我同意;-)ToString确实使URI更具可读性,但在这样做时,它会解码许多URLEncoded字符,这在某些情况下会很麻烦。net framework的运行时之间的行为也不同。请参阅以进行比较。
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"
// 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);