.net Uri ToString中断%26(&;)
当我发现Uri tostring破坏了Uri时,我真是大吃一惊。。。。这里有一个例子 如果你在即时模式下运行,你会得到.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
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);