首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QueryString畸形后URLDecode

QueryString畸形后URLDecode
EN

Stack Overflow用户
提问于 2008-09-23 21:24:08
回答 10查看 33.1K关注 0票数 15

我正在尝试通过Base64将一个C#.Net字符串传递到C#.Net web应用程序中。当字符串到达时,"+“(加号)将被空格替换。自动URLDecode进程似乎正在这样做。我无法控制通过QueryString传递的内容。有办法处理这个服务器端吗?

示例:

代码语言:javascript
复制
http://localhost:3399/Base64.aspx?VLTrap=VkxUcmFwIHNldCB0byAiRkRTQT8+PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

生产:

代码语言:javascript
复制
VkxUcmFwIHNldCB0byAiRkRTQT8 PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

人们建议使用URLEncoding查询字符串:

代码语言:javascript
复制
System.Web.HttpUtility.UrlEncode(yourString) 

我不能这样做,因为我无法控制调用例程(它与其他语言都很好地工作)。

还有人建议用加号取代空间:

代码语言:javascript
复制
Request.QueryString["VLTrap"].Replace(" ", "+");

我曾经想过这一点,但我对它的关注,我应该提到这一点开始,是我不知道其他字符可能是错误的,除了加号。

我的主要目标是在QueryString通过解码器之前拦截它。

为此,我尝试查看Request.QueryString.toString(),但其中包含相同的错误信息。在原始QueryString成为URLDecoded之前,有什么方法可以查看它吗?

经过进一步的测试,.Net似乎希望来自QuerString的所有内容都是QuerString编码的,但是浏览器不会自动对QuerString进行编码GET请求。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-09-23 21:29:48

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

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

如果您不控制入站URL,则首选第一个选项,因为这样可以避免大多数错误。

票数 11
EN

Stack Overflow用户

发布于 2008-10-16 08:09:35

建议的解决办法:

代码语言:javascript
复制
Request.QueryString["VLTrap"].Replace(" ", "+");

应该能正常工作。至于你的关切:

我曾经想过这一点,但我对它的关注,我应该提到这一点开始,是我不知道其他字符可能是错误的,除了加号。

这很容易通过阅读base64来缓解。现代base64中唯一合法的非字母数字字符是"/“、"+”和"=“(仅用于填充)。

其中,"+“是唯一具有特殊意义的URL中的转义表示形式。虽然其他两个在URL(路径分隔符和查询字符串分隔符)中有特殊意义,但它们不应该造成问题。

所以我觉得你应该没事。

票数 14
EN

Stack Overflow用户

发布于 2012-01-20 11:01:08

对于一个包含Base64值的参数,以及当它带有'+‘时,我遇到了类似的问题。只有Request.QueryString"VLTrap".Replace(“","+");对我来说很好;没有UrlEncode或其他编码帮助,因为即使您在页面上显示编码链接,并将其编码为'%2b‘,那么浏览器首先会在显示时将其更改为'+’,然后单击它,浏览器就会将其更改为空空间。所以,即使你自己展示链接,也无法控制它,就像海报上说的那样。即使在html电子邮件中,这种链接也是如此。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/123994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档