c# - request url是什么




在URLDecode之后QueryString格式不正确 (8)

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

我想通过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编码。


作为一个快速入门,你可以在base64解码之前用加号替换空格。


如果您在将字符串添加到URL之前进行URLEn编码,您将不会遇到任何这些问题(自动URLDecode会将其返回到原始状态)。


建议的解决方案:

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

应该工作得很好。 至于你的担心:

虽然如此,但是我对它的关注,我应该提到这一点,就是我不知道除了加号以外还有哪些其他角色可能是畸形的。

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

其中,“+”是唯一具有特殊含义的网址中的转义表示。 而另外两个在URL(路径分隔符和查询字符串分隔符)中有特殊的含义,它们不应该造成问题。

所以我觉得你应该可以。


我决不是一个C#开发人员,但它看起来像你需要url编码您的Base64字符串之前发送一个url。


我有一个包含Base64值的参数与“+”相同的问题。 只有Request.QueryString [“VLTrap”]。Replace(“”,“+”); 为我工作得很好; 没有UrlEncode或其他编码的帮助,因为即使你在页面上显示编码的链接,你自己的编码是'%2b',那么它就是浏览器,当它显示出来,当你点击它时浏览器会改变为'+'它来清空空间。 所以没有办法像原来的海报那样控制它,即使你自己显示链接。 即使在html电子邮件中也是这样的链接。


那么,显然你应该有Base64字符串URLEncoded发送到服务器之前。
如果你不能做到这一点,我会建议简单地将所有嵌入的空格替换回+; 因为b64琴弦不是有空间的,所以它是一种合法的策略。


难道你不能只是假设一个空间是一个+并取代它?

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

;)