我试图通过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编码.
建议的解决方案:
Request.QueryString["VLTrap"].Replace(" ", "+");
应该工作得很好.至于你的关注:
虽然我有这个,但我对它的关注,我应该提到这一点,我不知道除了加号之外还有哪些其他字符可能会出错.
通过阅读base64可以轻松解决这个问题.现代base64中唯一合法的非字母数字字符是"/","+"和"="(仅用于填充).
其中,"+"是唯一具有特殊含义的URL作为转义表示.虽然其他两个在URL(路径分隔符和查询字符串分隔符)中具有特殊含义,但它们不应构成问题.
所以我认为你应该没事.
你可以手动替换值(argument.Replace(' ', '+')
)或咨询HttpRequest.ServerVariables["QUERY_STRING"]
(甚至更好的HttpRequest.Url.Query)并自己解析它.
但是,您应该尝试解决URL给出的问题; 加号需要在URL中编码为"%2B",因为加号否则表示空格.
如果您不控制入站URL,则首选该选项,因为您可以通过这种方式避免大多数错误.