POST'ing массивы в WebClient (C # /. Net) - PullRequest
7 голосов
/ 15 октября 2010

У меня есть приложение .net, в котором есть веб-запрос, который к POST добавляет несколько раз один и тот же ключ, что делает его массивом в глазах PHP, Java-сервлетов и т. Д. Я хотел переписать это с использованием WebClient,но если я вызываю метод WebClient QueryString.Add () с одним и тем же ключом несколько раз, он просто добавляет новые значения, создавая одиночное значение через запятую вместо массива значений.

Я отправляю свой запрос с использованием WebClient'sUploadFile () потому что в дополнение к этим метаданным я хочу опубликовать файл.

Как я могу использовать WebClient для публикации массива значений вместо одного значения (значений, разделенных запятыми)?

Ура

Ник

1 Ответ

5 голосов
/ 15 октября 2010

PHP просто использует анализатор для преобразования множества значений, отправленных в формате массива, в массив. Формат <arrayName>[<key>].

Так что, если вы хотите получить массив в PHP от $_GET, добавьте эти параметры запроса: x[key1] и x[key2]. $_GET['x'] в PHP будет массив из 2 элементов: ["x"]=> array(2) { ["key1"]=> <whatever> ["key2"]=> <whatever> }.

Редактировать - вы можете попробовать этот метод расширения:

public static class WebClientExtension
{
    public static void AddArray(this WebClient webClient, string key, params string[] values)
    {
        int index = webClient.QueryString.Count;

        foreach (string value in values)
        {
            webClient.QueryString.Add(key + "[" + index + "]", value);
            index++;
        }
    }
}

и в коде:

webClient.AddArray("x", "1", "2", "3");
webClient.AddArray("x", "4");

или вручную:

webClient.QueryString.Add("x[key1]", "4");
webClient.QueryString.Add("x[key2]", "1");

Проверка ошибок отсутствует и т. Д. Вы можете сделать это сами:)

...