URLDecode后查询字符串格式不正确(QueryString malformed after U

2019-06-28 07:09发布

我想在一个Base64字符串转换成通过查询字符串一个C#.NET Web应用程序通过。 当字符串到达​​的“+”(加号)是由一个空间取代。 看来,自动URLDecode过程是这样做的。 我有过正在通过查询字符串传递什么样的控制。 有什么办法来处理这个服务器端?

例:

http://localhost:3399/Base64.aspx?VLTrap=VkxUcmFwIHNldCB0byAiRkRTQT8+PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

生产:

VkxUcmFwIHNldCB0byAiRkRTQT8 PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

人们已经提出URL编码查询字符串:

System.Web.HttpUtility.UrlEncode(yourString) 

我不能这样做,因为我有呼叫程序没有控制(这是工作的罚款与其他语言)。

还有一个加号替换空间的建议:

Request.QueryString["VLTrap"].Replace(" ", "+");

我虽然这一点,但我对它的关注,我应该提到这个开始,是我不知道其他字符可能除了加号被畸形。

我的主要目标是通过解码器运行前拦截的查询字符串。

为此我试图寻找Request.QueryString.toString(),但它含有相同的格式不正确的信息。 有没有什么办法看原始的QueryString是URLDecoded 吗?

经过进一步的测试看来,预计净一切从QuerString进来的是编码的URL,但浏览器不会自动URL编码的GET请求。

Answer 1:

您可以手动替换值( argument.Replace(' ', '+')或咨询HttpRequest.ServerVariables["QUERY_STRING"]甚至更好的HttpRequest.Url.Query)和自己解析它。

然而,你应该设法解决其中的URL给出的问题; 一个加号需要得到编码为URL“%2B”,因为有加,否则代表一个空格。

如果你不控制入站的网址,因为你避免最错误这种方式将是首选的第一个选项。



Answer 2:

建议的解决方案:

Request.QueryString["VLTrap"].Replace(" ", "+");

应该只是罚款。 至于你的关注:

我虽然这一点,但我对它的关注,我应该提到这个开始,是我不知道其他字符可能除了加号被畸形。

这是很容易通过,以减轻阅读的base64 。 唯一的非字母数字字符,在现代的base64是合法的是“/”,“+”和“=”(其仅用于填充)。

其中,“+”是具有特殊的意义在URL中的转义表示唯一的一个。 而其他两个有URL中的特殊意义(路径分隔符和查询字符串分隔符),就应该没有问题了。

所以我觉得你应该确定。



Answer 3:

我有此相同的问题,除了我没有对我的网址控制。 即使Server.URLDecodeServer.URLEncode它不会将其转换回+标志,即使我的查询字符串如下所示:

http://localhost/childapp/default.aspx?TokenID=0XU%2fKUTLau%2bnSWR7%2b5Z7DbZrhKZMyeqStyTPonw1OdI%3d

当我执行以下。

string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);

它仍然不转换%2b回一个+符号。 相反,我必须做到以下几点:

string tokenID = Server.UrlDecode(Request.QueryString["TokenID"]);
tokenID = tokenID.Replace(" ", "+");

然后,它工作正常。 非常奇怪。



Answer 4:

我有类似的问题,它包含的Base64值的参数,当它与“+”。 只的Request.QueryString [ “VLTrap”]替换(””, “+”)。 精为我工作; 不以UrlEncode或其他编码帮助,因为即使你展示页面上有“+”编码为“%2B”编码链接自己,那么它的浏览器,它在第一次改变为“+”时,它showen,当你点击它,然后浏览器的变化它空的空间。 所以没有办法控制它作为原始的海报说,即使你表现出自己的链接。 甚至在HTML电子邮件等环节同样的事情。



Answer 5:

如果你将它添加到URL之前URLEncode的字符串中,你不会有任何的这些问题(自动URLDecode将它恢复到原来的状态)。



Answer 6:

显然,你应该把它发送到服务器之前的Base64编码字符串url编码。
如果你不能做到这一点,我会建议简单地更换任何嵌入的空格回到+; 因为B64字符串不suposed有空格,其合法的策略...



Answer 7:

System.Web.HttpUtility.UrlEncode(yourString)会做的伎俩。



Answer 8:

作为一个快速的黑客,你可以基于64位解码之前替换空间,加上性格。



Answer 9:

如果你使用System.Uri.UnescapeDataString(yourString)会忽略+ 。 这种方法只能在像你这样的情况下使用时,绳子就已经使用某种客户端或服务器上的传统方法的编码。

看到这个博客帖子: http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx



Answer 10:

我绝不是一个C#开发,但它看起来像你需要发送它作为一个网址前网址编码您Base64编码字符串。



Answer 11:

你不能只是假设一个空间是A +和更换呢?

Request.QueryString["VLTrap"].Replace(" ", "+");

;)



文章来源: QueryString malformed after URLDecode
标签: c# asp.net url