Как извлечь поля конкретного случая из HttpUtility.ParseQueryString? - PullRequest
0 голосов
/ 28 января 2019

Функция стандартной библиотеки .net System.Web.HttpUtility.ParseQueryString анализирует строку запроса в пары имя / значение.

var a = HttpUtility.ParseQueryString("abc=123&def=456");
var x = a["abc"]; /* "123" */

Когда есть два поля с одинаковыми именамиза исключением того, что они различаются в зависимости от регистра, возвращаемый объект объединяет оба значения вместе с запятой.

var a = HttpUtility.ParseQueryString("abc=123&ABC=456");
var x = a["abc"]; /* "123,456" */

Как я могу самостоятельно извлечь только часть "abc"?Надеюсь, без переписывания парсера или предварительной обработки строки.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Наличие двух ключей с одинаковыми именами в разных регистрах невозможно с parseQuerystring, поскольку его тип возвращаемого значения - NameValueCollection, поведение по умолчанию которого заключается в предоставлении коллекции уникальных ключей, и если вы попытаетесь добавить один и тот же ключ в эту коллекцию, он по умолчанию добавитнаходится в запятой, разделенной существующим значением ключа.

Дайте мне знать, если это поможет.

0 голосов
/ 28 января 2019

Надеюсь, без переписывания парсера или предварительной обработки строки.

Не думаю, что это возможно, но вот несколько краткая реализация, которая должна сработать:

string pattern = @"(?<=^|&)(\w+)(?==)=(\w+)(?=&?)";
string input = @"abc=123&ABC=456&abc=789";

Dictionary<string, string> parameters = new Dictionary<string, string>();

foreach (Match m in Regex.Matches(input, pattern))
{
    if (parameters.ContainsKey(m.Groups[1].Value))
    {
        //preserve original behaviour, i.e. concat values of same parameters
        parameters[m.Groups[1].Value] = parameters[m.Groups[1].Value] + "," + m.Groups[2].Value;
    } else
    {
        parameters.Add(m.Groups[1].Value, m.Groups[2].Value);
    }
}

Может произойти сбой с параметрами Юникода за пределами a-zA-Z0-9_, поэтому вам, возможно, придется изменить регулярное выражение в соответствии с вашими потребностями.

...