【问题标题】:Multiple values of a querystring parameter that contain commas C#包含逗号 C# 的查询字符串参数的多个值
【发布时间】:2021-08-11 12:17:10
【问题描述】:

当参数名称相同且该参数的值包含逗号时,尝试询问查询字符串的值时,我在 ASP.Net 中遇到问题。

例如,假设我有一个如下所示的 URL...

https://example.com/mypage.aspx?val=red%2cblue&val=black%2cwhite

如您所见,这个 URL 有 2 个查询字符串参数,都称为“val”,每个参数的值都有经过 URL 编码的逗号,但是当我在 c# 中查询查询字符串参数“val”时,我得到一个4 个独立项目(红色、蓝色、黑色和白色)的数组,而我实际需要的是 2 个值(“红色、蓝色”和“黑色、白色”)

在读取 C# 中的值时,似乎 URL 编码被“有效地”解码,这反过来又导致了我无法准确定义参数值的问题。我通常会读取查询字符串参数,并在逗号上执行拆分,但这种方法对我不起作用。

更复杂的是,我无法知道我的值中可以出现多少个逗号,或者包含多少个值。例如,可以返回以下所有 URL...

https://example.com/mypage.aspx

https://example.com/mypage.aspx?val=red%2cblue

https://example.com/mypage.aspx?val=red%2cblue&val=black%2cwhite&val=red%2cblue%2cgreen

https://example.com/mypage.aspx?val=red%2cblue&val=black%2cwhite&val=yellow

https://example.com/mypage.aspx?val=red%2cblue&val=black%2cwhite&val=red%2cblue%2cblack%2cwhite%2cgreen%2cyellow

在 C# 中有没有一种简单的方法来正确解释查询字符串值?

【问题讨论】:

  • 你如何读取这些值?

标签: c# asp.net request.querystring


【解决方案1】:

我想说,由于没有定义的标准,在查询字符串中有多个同名的键不是very good idea。

尽管您似乎 HttpUtility.ParseQueryString 可以以您需要的方式处理这种情况:

var nameValueCollection = HttpUtility.ParseQueryString("val=red%2cblue&val=black%2cwhite");
var result = nameValueCollection.GetValues("val");
foreach (var s in result)
{
    Console.WriteLine(s); // prints 2 strings: "red,blue" and "black,white"
}  

【讨论】:

  • 这正是我所需要的!谢谢。
  • @Karl 很乐意提供帮助!通常NameValueCollection 应该已经可用,所以你可以尝试Request.Params.GetValues("val") 之类的东西。
猜你喜欢
  • 2013-05-31
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 2016-10-01
  • 1970-01-01
相关资源
最近更新 更多