System.Uri.ToString()unescapes uriencoded querystrings。怎么阻止它?

时间:2011-07-13 13:36:05

标签: c# asp.net

如果我这样做:

new Uri("http://www.mydomain.com?name=i%20hate%20asp.net!").ToString()

它不会返回:

http://www.mydomain.com?name=i%20hate%20asp.net!

它返回:

http://www.mydomain.com?name=i hate asp.net!

为什么呢?如何正常工作?

2 个答案:

答案 0 :(得分:4)

您需要使用Uri.AbsoluteUriToString()只是基础数据的字符串表示,而不是正确的URI。

new Uri("http://www.mydomain.com?name=i%20hate%20asp.net!").AbsoluteUri

答案 1 :(得分:1)

我认为这种行为可能绝对正确,ToString() - 方法旨在显示人类可读的结果。 该方法的规范说:

(via http://msdn.microsoft.com/de-de/library/system.uri.tostring.aspx)

Return Value
Type: System.String
A String instance that contains the unescaped canonical representation of the Uri instance. All characters are unescaped except #, ?, and %.

你打算用uri的字符串表示什么?也许有了这些信息,我们可以为youtr问题提供正确的解决方案。我想你需要在一般情况下使用yourUri.AbsoluteUri而不是yourUri.ToString()。