解码服务器端的查询字符串值

时间:2018-01-23 21:40:23

标签: c# asp.net wcf

我正在使用WCF和.Net 4在我的服务器上运行Web服务。合同类型是WebGet。这是我的问题,在某个时间点,有人通过URL编码的查询字符串发送数据。所以我添加了HttpUtility.UrlDecode来解码参数。我认为这解决了我当时的问题。现在,我已经发送了一个URL编码的字符串,我发现该字符串正在被解码到该方法中(甚至在获取HttpUtility.UrlDecode之前)。

所以现在我很困惑,如果.Net代码在它到达我的方法之前解码它,为什么我需要明确地调用解码?但有一段时间它不是,这是最近对基础.Net框架的改变吗?

现在我的问题是我的用户正在发送数据(未编码),其中数据如下所示:“abc%1234”,我得到“abc34”,解码吃了3个字符。但是,如果我将%符号urlencode为“abc%251234”,则进入该方法的值为“abc%1234”(我的预期)然后调用HttpUtility.UrlDecode将其更改为“abc34”(其中不是我的预期。

我不知道该怎么办。我是否删除了对URLDecode的显式调用,直到它再次开始编码或者是否有更好的方法来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

这是subtle thing in documentation,很容易错过:

  

HttpRequest.QueryString属性

     

物业价值
  NameValueCollection
  客户端发送的查询字符串变量。 键和值是   URL解码。

所以如果 您通过query string(或HttpRequest.QueryString)集合访问了Params,那么已经已经解码。

你可以在RawUrlQueryString.ToString()中找到原始字符串(手动即 - re:操作,拆分等)。

一天结束,%

  

因为百分比(&#34;%&#34;)字符用作指示符   百分比编码的八位字节,必须百分比编码为&#34;%25&#34;为了那个原因   八位字节用作URI中的数据。

参考:RFC3986

H个