【问题标题】:get raw (non-decoded) querystring key/values获取原始(非编码)查询字符串键/值
【发布时间】:2014-01-06 19:46:16
【问题描述】:

如何获取查询字符串中的原始(未解码)值?

我找到了 Request.Url.Query,它确实成功地为我提供了原始查询字符串本身。但是,它给了我一个“字符串”类型和整个 QS 内容:如何获取键/值对?

我确实找到了HttpUtility.ParseQueryString,但这迫使我进行解码。我需要原始名称/值对。

我必须为此实现自己的查询字符串解析吗?有没有人做过一个我可以使用的忽略编码的?我找到了Mono implementation,但这也强制编码。

谢谢!

编辑:我正在寻找这个的原因是因为有人(不是我!)编写了一些代码来加密一个值并将其放在查询字符串中。但是他们忘记了先对其进行编码。 Request.Querystring() 正在执行的解码导致无法解密其中大约 50% 的内容,因为加密会留下诸如“+”和“。”之类的内容。

【问题讨论】:

  • 为什么编码的键/值对比未编码的更有价值?
  • Request.QueryString[key]返回的值重新编码很简单。
  • 我之所以寻找这个是因为有人(不是我!)编写了一些代码来加密一个值并将其放在查询字符串中。但是他们忘记了先对其进行编码。 Request.Querystring() 正在执行的解码导致无法解密其中大约 50% 的内容,因为加密会留下“+”和“。”等内容。
  • @dferraro:而且您无法更改将该值放入查询字符串的代码,对吧?
  • 如果您在目标客户端操作系统上测试所有最有可能的客户端/浏览器,我认为您实际上或多或少是安全的。问题是你不能全部测试它们。我确信某些浏览器会在您粘贴时更改 url 的 视觉表示,这对于非拉丁字符集最为突出。但是,我没有观察服务器端来查看这些更改是如何反映的。只要您对所有可能的字符/浏览器/客户端都进行了测试,就可以了。

标签: c# asp.net query-string


【解决方案1】:

Request.QueryString 应该给你一个 NameValueCollection,其中包含所有已解码的键/值对。

对不起,我误解了这个问题。您需要自己解析它,但这应该不难:

Request.Url.Query.Split('&').Select(pair => pair.Split('='))
    .ToDictionary(a => a[0], a => a[1]);

当然,这是假设您的网址中未编码的值不包含“&”或“=”值。如果他们这样做......好吧,这就是 URL 编码的用途,不是吗?

【讨论】:

  • 谢谢,但我需要未编码的值。您在浏览器地址栏中看到的原始值
  • @dferraro:抱歉,问题不清楚。对我来说,“未编码”意味着“解码”。地址栏中的值是“URL 编码”值。
  • +1。显然,如果有人编码失败,它也可能在错误的地方包含&=...
  • @AlexeiLevenkov:是的,我已经在更新时附上了这样的注释。这就是编码值的原因。 :-)
  • @dferraro 在任何情况下,您都必须推出自己的解析器,因为您的要求非常......独一无二。
猜你喜欢
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 2021-10-07
  • 2012-08-08
  • 2016-04-10
  • 1970-01-01
  • 2015-12-20
  • 2016-02-17
相关资源
最近更新 更多