我正在使用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>
答案 0 :(得分:0)
这是subtle thing in documentation,很容易错过:
HttpRequest.QueryString属性
物业价值
NameValueCollection
客户端发送的查询字符串变量。 键和值是 URL解码。强>
所以如果 您通过query string
(或HttpRequest.QueryString
)集合访问了Params
,那么已经已经解码。
你可以在RawUrl
,QueryString.ToString()
中找到原始字符串(手动即 - re:操作,拆分等)。
一天结束,%
:
因为百分比(&#34;%&#34;)字符用作指示符 百分比编码的八位字节,必须百分比编码为&#34;%25&#34;为了那个原因 八位字节用作URI中的数据。
参考:RFC3986
H个