System.Uri和编码冒号(:)

时间:2017-05-04 09:24:34

标签: c# .net uri urlencode

在.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切换回:。这是一个错误吗?什么是最好的解决方法?

1 个答案:

答案 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

其他链接