我正在尝试通过Base64将一个C#.Net字符串传递到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(),但其中包含相同的错误信息。在原始QueryString成为URLDecoded之前,有什么方法可以查看它吗?
经过进一步的测试,.Net似乎希望来自QuerString的所有内容都是QuerString编码的,但是浏览器不会自动对QuerString进行编码GET请求。
发布于 2008-09-23 21:29:48
您可以手动替换值(argument.Replace(' ', '+'))或咨询HttpRequest.ServerVariables["QUERY_STRING"] (更好的是HttpRequest.Url.Query)并自己解析它。
但是,您应该尝试解决URL给定的问题;加号需要在URL中被编码为"%2B“,因为加号表示空格。
如果您不控制入站URL,则首选第一个选项,因为这样可以避免大多数错误。
发布于 2008-10-16 08:09:35
建议的解决办法:
Request.QueryString["VLTrap"].Replace(" ", "+");应该能正常工作。至于你的关切:
我曾经想过这一点,但我对它的关注,我应该提到这一点开始,是我不知道其他字符可能是错误的,除了加号。
这很容易通过阅读base64来缓解。现代base64中唯一合法的非字母数字字符是"/“、"+”和"=“(仅用于填充)。
其中,"+“是唯一具有特殊意义的URL中的转义表示形式。虽然其他两个在URL(路径分隔符和查询字符串分隔符)中有特殊意义,但它们不应该造成问题。
所以我觉得你应该没事。
发布于 2012-01-20 11:01:08
对于一个包含Base64值的参数,以及当它带有'+‘时,我遇到了类似的问题。只有Request.QueryString"VLTrap".Replace(“","+");对我来说很好;没有UrlEncode或其他编码帮助,因为即使您在页面上显示编码链接,并将其编码为'%2b‘,那么浏览器首先会在显示时将其更改为'+’,然后单击它,浏览器就会将其更改为空空间。所以,即使你自己展示链接,也无法控制它,就像海报上说的那样。即使在html电子邮件中,这种链接也是如此。
https://stackoverflow.com/questions/123994
复制相似问题