包含评估为 space 的 `+` 的查询字符串?

Querystring containing `+` evaluating to space?

我有一个参数,我将其作为 querystring 传递给页面 URL。在将值作为 querystring 传递之前,我正在加密该值。但是加密值有时会在querystring中包含+。我知道它在URL中有特殊的意义。所以我用 Server.UrlEncode(encryptedvalue) 来保证安全。但是但是当我得到 Querystring 只有 + 在解码 URL.

之前被评估

这是生成查询字符串的代码,

var result =  Server.UrlEncode(this.UserSecurity.Encrypt<string>(value));

在 querystring(result) 的这个值是 + 之后变成预期的 %2b

querystringvalue = "R3oQCPn%2bNVV4P0aL0LAZEL6Og1%2bQ2vOJJDJCSTY6WXE%3d"

我无法控制 Encryption 方法,所以我无法在其中进行更改。

所以当我访问重定向页面时,我得到,

1) 当我不使用 UrlDecode+ 变成 </code></p> <pre><code> querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="

2) 当我使用 UrlDecode 然后 + 仍然变成 </code></p> <pre><code> querystringvalue = "R3oQCPn NVV4P0aL0LAZEL6Og1 Q2vOJJDJCSTY6WXE="

3) 当我在 watch window 中看到我看到的奇怪的东西,

如您所见,查询字符串中存在 +,但它已解析为 </code>。</p> <p>所以我的问题是,</p> <p>1) 为什么 <code>%3d 没有解析为 =%2b 解析为 +
2)我能做些什么来解决这个问题?因为 %2b 解析为 + 然后解析为 </code> 给我错误的解密值和有时格式异常。</p> <p><strong>更新</strong> 生成 <code>result 后,我直接将其附加到 URL,无需任何进一步处理 "page.aspx?taskid="+result

我要在这里冒险并假设您正在使用 BASE64 对加密数据进行编码,也许使用 Convert.ToBase64String

你能修改Encrypt功能吗?如果是这样,请尝试使用 HttpServerUtility.UrlTokenEncode:

对字节进行编码

https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urltokenencode

要转换回 byte[],请使用对称 HttpServerUtility.UrlTokenDecode 方法。

https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urltokendecode

这将允许您在 URL 中安全地传递令牌。这是您的选择吗?