我想在一个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请求。
您可以手动替换值( argument.Replace(' ', '+')
或咨询HttpRequest.ServerVariables["QUERY_STRING"]
甚至更好的HttpRequest.Url.Query)和自己解析它。
然而,你应该设法解决其中的URL给出的问题; 一个加号需要得到编码为URL“%2B”,因为有加,否则代表一个空格。
如果你不控制入站的网址,因为你避免最错误这种方式将是首选的第一个选项。
建议的解决方案:
Request.QueryString["VLTrap"].Replace(" ", "+");
应该只是罚款。 至于你的关注:
我虽然这一点,但我对它的关注,我应该提到这个开始,是我不知道其他字符可能除了加号被畸形。
这是很容易通过,以减轻阅读的base64 。 唯一的非字母数字字符,在现代的base64是合法的是“/”,“+”和“=”(其仅用于填充)。
其中,“+”是具有特殊的意义在URL中的转义表示唯一的一个。 而其他两个有URL中的特殊意义(路径分隔符和查询字符串分隔符),就应该没有问题了。
所以我觉得你应该确定。
我有此相同的问题,除了我没有对我的网址控制。 即使Server.URLDecode
和Server.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(" ", "+");
然后,它工作正常。 非常奇怪。
我有类似的问题,它包含的Base64值的参数,当它与“+”。 只的Request.QueryString [ “VLTrap”]替换(””, “+”)。 精为我工作; 不以UrlEncode或其他编码帮助,因为即使你展示页面上有“+”编码为“%2B”编码链接自己,那么它的浏览器,它在第一次改变为“+”时,它showen,当你点击它,然后浏览器的变化它空的空间。 所以没有办法控制它作为原始的海报说,即使你表现出自己的链接。 甚至在HTML电子邮件等环节同样的事情。
如果你将它添加到URL之前URLEncode的字符串中,你不会有任何的这些问题(自动URLDecode将它恢复到原来的状态)。
显然,你应该把它发送到服务器之前的Base64编码字符串url编码。
如果你不能做到这一点,我会建议简单地更换任何嵌入的空格回到+; 因为B64字符串不suposed有空格,其合法的策略...
System.Web.HttpUtility.UrlEncode(yourString)
会做的伎俩。
作为一个快速的黑客,你可以基于64位解码之前替换空间,加上性格。
如果你使用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
我绝不是一个C#开发,但它看起来像你需要发送它作为一个网址前网址编码您Base64编码字符串。
你不能只是假设一个空间是A +和更换呢?
Request.QueryString["VLTrap"].Replace(" ", "+");
;)