包含逗号 C# 的查询字符串参数的多个值

Multiple values of a querystring parameter that contain commas C#

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

例如,假设我有一个 URL,内容如下...

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

如您所见,这个 URL 有 2 个查询字符串参数,都称为“val”,每个参数的值都有经过 URL 编码的逗号,但是当我询问查询字符串时c# 中的参数“val”,当我实际需要获取的是 2 个值(“红、蓝”和“黑、白”)

当读取 C# 中的值时,似乎 URL 编码被“有效地”解码,这反过来又给我带来了一个问题,因为我无法准确定义我的参数值。我通常会读取查询字符串参数,然后对逗号进行拆分,但这种方法对我不起作用。

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

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# 中是否有正确解释查询字符串值的简单方法?

我会说在查询字符串中有多个同名的键不是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"
}