在.Net 4.5之前,似乎System.Uri会对编码的斜杠进行编码,但此后已经修复。参考:https://stackoverflow.com/a/20733619/188740
我遇到了与冒号相同的问题。 System.Uri仍然编码冒号。例如:
var uri = new Uri("http://www.example.com/?foo=http%3A%2F%2Fwww.example.com");
var s = uri.ToString(); //http://www.example.com/?foo=http:%2F%2Fwww.example.com
注意System.Uri如何将%3A
切换回:
。这是一个错误吗?什么是最好的解决方法?
答案 0 :(得分:6)
如何使用Uri.AbsoluteUri
呢?
var s = uri.AbsoluteUri;
// http://www.example.com/?foo=http%3A%2F%2Fwww.example.com
根据来源,uri.ToString()
看起来有逻辑可以看到某些部分可以看到here,而.AbsoluteUri
有一个更简单的implementation。
<强> Uri.ToString()强>
根据System.Uri.ToString()
的MSDN文档:
包含Uri实例的未转义规范表示的String实例。除#,?和%之外,所有字符均未转义。
然而,根据示例并在尝试更多字符串后,看起来实际的实现看起来像&#39;仅:
,*
和{{1}没有转义&#39;
spaces
其他链接