为什么System.Uri会破坏我的网址?

时间:2014-10-23 16:53:20

标签: c# http

我有以下C#代码Uri uri = new Uri("http://localhost/query?param=%E2%80%AE");uri将其解释为http://localhost/query?param=而不是http://localhost/query?param=%E2%80%AE。因此,http Web服务器获取http://localhost/query?param=(没有此参数的值)。为什么它会破坏我的网址?如何使用HttpWebRequest正确创建http://localhost/query?param=%E2%80%AE

P.S。我使用%E2%80%AE获得System.Uri.EscapeDataString(Convert.ToString((char)8238))

2 个答案:

答案 0 :(得分:1)

ToString()将尝试将uri呈现为字符串。即,它将逃脱逃脱的角色。但是,转义的序列%E2%80%AE不可打印。

改为使用AbsoluteUri

var uriStr = uri.AbsoluteUri; // "http://localhost/query?param=%E2%80%AE"

答案 1 :(得分:0)

这是对暴露方法的误用。

  • ToString()方法,从第一个祖先派生的Object,是一种提供给定对象实例的某种可打印形式的方法。它不是实例标识,也不是所有内部字段的完整序列化。
  • Uri类被设计为URI解析器/编辑器/解剖器,因此它有各种方法来合并或拆分给定的URI字符串以获取服务器名称,本地路径等。因此,如果您需要URI作为一个整体,您必须使用“ Uri.AbsolutePath属性“http://msdn.microsoft.com/en-us/library/system.uri.absolutepath(v=vs.110).aspx