QueryString представляет собой NameValueCollection
, что объясняет, почему дублированные значения ключей отображаются в виде списка через запятую (из документации для метода Add ):
Если указаноключ уже существует в целевом экземпляре NameValueCollection, указанное значение добавляется в существующий список значений через запятую в виде «значение1, значение2, значение3».
Так, например, с учетом этогоСтрока запроса: q1=v1&q2=v2,v2&q3=v3&q1=v4
, при переборе ключей и проверке значений будет показано:
Key: q1 Value:v1,v4
Key: q2 Value:v2,v2
Key: q3 Value:v3
Поскольку вы хотите разрешить запятые в значениях строки запроса, вы можете использовать GetValues метод, который будет возвращать строковый массив, содержащий значения для ключа в строке запроса.
static void Main(string[] args)
{
HttpRequest request = new HttpRequest("", "http://www.stackoverflow.com", "q1=v1&q2=v2,v2&q3=v3&q1=v4");
var queryString = request.QueryString;
foreach (string k in queryString.Keys)
{
Console.WriteLine(k);
int times = queryString.GetValues(k).Length;
if (times > 1)
{
Console.WriteLine("Key {0} appears {1} times.", k, times);
}
}
Console.ReadLine();
}
выводит на консоль следующее:
q1
Key q1 appears 2 times.
q2
q3