System.Uri和编码冒号(:)

在.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 

注意%3A如何切换回:由System.Uri。 这是一个错误吗? 什么是最好的解决方法?

如何使用Uri.AbsoluteUri呢?

 var s = uri.AbsoluteUri; // http://www.example.com/?foo=http%3A%2F%2Fwww.example.com 

根据源代码, uri.ToString()看起来有逻辑可以看到某些部分可以在这里看到,而.AbsoluteUri有一个更简单的实现 。

Uri.ToString()

根据System.Uri.ToString()的MSDN文档:

包含Uri实例的未转义规范表示的String实例。 除#,?和%外,所有字符均未转义。

然而,根据示例并且在尝试了更多字符串之后,看起来实际的实现看起来像‘Only :*并且spaces未转义’

 %3A (:) // gets unescaped %20 ( ) // gets unescaped %2A (*) // gets unescaped %2b, %26, %23, %24, %25 (+, &, #, $, %) // Remain as-is (escaped) 

其他链接

  • System.Uri.AbsoluteUri