Ответ 1
QueryString - это NameValueCollection
, что объясняет, почему повторяющиеся значения ключей отображаются в виде списка, разделенного запятыми (из документации для метода Добавить):
Если указанный ключ уже существует в целевом NameValueCollection экземпляр, указанное значение добавляется к существующей разделенной запятой список значений в форме "value1, value2, value3".
Итак, например, с учетом этой строки запроса: 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