我正在使用AES加密作为URL的值。我在这里只用一个参数对它进行了采样来演示问题:
http://localhost:12345/pagename?id=ha3bEv8A%2ffs0goPGeO6NPQ%3d%3d
Request.QueryString["id"]
返回明显与加密 ID 的值不匹配的"ha3bev8a/fs0gopgeo6npq=="
。 有什么东西绊倒了查询字符串吗?
您正在获得一个 URL 编码的查询字符串,Request.QueryString["id"]
似乎为您解码。您始终可以重新编码它:
string decodedId = Request.QueryString["id"];
string reEncodedId = HttpUtility.UrlEncode(decodedId);
您看到的值实际上是正确的。可能让您感到困惑的是它的呈现方式。URL 中的 id 值以 URL 编码进行编码。 某些字符必须以不同的方式在 URL 字符串中编码,因为它们是特殊字符,如果编码不正确,有时会弄乱字符串的解释方式。
例如,在您提供的查询字符串中: http://localhost:12345/pagename?id=ha3bEv8A%2ffs0goPGeO6NPQ%3d%3d
%2f 字符是对"/"字符进行编码的一种方法,而 %3d 是对"="字符进行编码的一种方法。
当您通过获取 Request.QueryString["id"] 获取值时,它会将其从 URL 编码字符串解码回原始文本。
查看此页面以获取更多参考。 https://www.w3schools.com/tags/ref_urlencode.asp