Request.QueryString 没有返回正确的值

Request.QueryString not returning the correct value

我正在对 URL 的值使用 AES 加密。我在这里仅使用一个参数对其进行了采样以演示问题:

http://localhost:12345/pagename?id=ha3bEv8A%2ffs0goPGeO6NPQ%3d%3d

Request.QueryString["id"] returns "ha3bev8a/fs0gopgeo6npq==" 这显然与加密 ID 的值不匹配。 QueryString 有问题吗?

您得到一个 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