【问题标题】:Request.QueryString not returning the correct valueRequest.QueryString 没有返回正确的值
【发布时间】:2019-03-21 09:28:20
【问题描述】:

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

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

Request.QueryString["id"] 返回的"ha3bev8a/fs0gopgeo6npq==" 显然与加密 ID 的值不匹配。有什么东西绊倒了 QueryString 吗?

【问题讨论】:

  • 看看HttpServerUtility.UrlEncode/Decodedocs.microsoft.com/en-us/dotnet/api/…
  • 那个 ("ha3bev8a/fs0gopgeo6npq==) 看起来很像 Base64 编码的字符串
  • 您是否使用一些内置功能来加密/解密查询字符串?貌似返回值没问题,需要自己另外解密。
  • 如果需要,我可以在这里打印加密和解密方法吗?如果它与该值不完全匹配,它将无法正确解密,对吗?目前没有。但是,如果我手动复制 URL 中的值并将其发送到 Decrypt 方法,它就可以正常工作,

标签: c# url query-string


【解决方案1】:

您看到的值实际上是正确的。可能让您感到困惑的是它的呈现方式。 URL 中的 id 值在 URL Encoding 中编码。 某些字符必须以不同的方式在 URL 字符串中编码,因为它们是特殊字符,如果编码不正确,有时会混淆字符串的解释方式。

例如,在您提供的查询字符串中: http://localhost:12345/pagename?id=ha3bEv8A%2ffs0goPGeO6NPQ%3d%3d

%2f 字符是一种编码“/”字符的方法,而 %3d 是一种编码“=”字符的方法。

当您通过获取 Request.QueryString["id"] 获取值时,它会将其从 URL 编码字符串解码回原始文本。

查看此页面以获取更多参考。 https://www.w3schools.com/tags/ref_urlencode.asp

【讨论】:

  • 有没有办法按原样获取值并作为字符串发送到方法?
  • 哦等等我可以把它编码回那个值!我现在有了。
【解决方案2】:

您将获得一个 URL 编码的查询字符串,Request.QueryString["id"] 似乎可以为您解码。你总是可以重新编码它:

string decodedId = Request.QueryString["id"];
string reEncodedId = HttpUtility.UrlEncode(decodedId);

【讨论】:

  • 不,我需要解码的值!这是一个类似于邮政编码的 5 位数字。相反,我想要完全编码的值,以便我可以将它发送到我的解密方法。
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多