当前位置:  开发笔记 > 编程语言 > 正文

在URLDecode之后,QueryString格式错误

如何解决《在URLDecode之后,QueryString格式错误》经验,为你挑选了2个好方法。

我试图通过QueryString将Base64字符串传递到C#.Net Web应用程序.当字符串到达​​时,"+"(加号)符号将被空格替换.似乎自动URLDecode进程正在执行此操作.我无法控制通过QueryString传递的内容.有没有办法处理这个服务器端?

例:

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

生产:

VkxUcmFwIHNldCB0byAiRkRTQT8 PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

人们建议URLEncoding查询字符串:

System.Web.HttpUtility.UrlEncode(yourString) 

我无法做到这一点,因为我无法控制调用例程(与其他语言一起工作正常).

还有建议用加号替换空格:

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

虽然我有这个,但我对它的关注,我应该提到这一点,我不知道除了加号之外还有哪些其他字符可能会出错.

我的主要目标是在通过解码器运行之前拦截QueryString.

为此,我尝试查看Request.QueryString.toString(),但这包含相同的格式错误的信息.在URLDecoded 之前有没有办法查看原始QueryString ?

经过进一步测试后,似乎.Net期望从QuerString进入的所有内容都进行URL编码,但浏览器不会自动对GET请求进行URL编码.



1> Tim Farley..:

建议的解决方案:

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

应该工作得很好.至于你的关注:

虽然我有这个,但我对它的关注,我应该提到这一点,我不知道除了加号之外还有哪些其他字符可能会出错.

通过阅读base64可以轻松解决这个问题.现代base64中唯一合法的非字母数字字符是"/","+"和"="(仅用于填充).

其中,"+"是唯一具有特殊含义的URL作为转义表示.虽然其他两个在URL(路径分隔符和查询字符串分隔符)中具有特殊含义,但它们不应构成问题.

所以我认为你应该没事.



2> Troels Thoms..:

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

但是,您应该尝试解决URL给出的问题; 加号需要在URL中编码为"%2B",因为加号否则表示空格.

如果您不控制入站URL,则首选该选项,因为您可以通过这种方式避免大多数错误.


最简单的方法是使用Uri.EscapeDataString/Uri.UnescapeDataString.
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有