Flurl Array Encoding - PullRequest
       12

Flurl Array Encoding

0 голосов
/ 04 февраля 2019

Я пытаюсь опубликовать некоторые данные, которые включают строковый массив, в конечную точку, но получаю сообщение об ошибке «Недопустимый массив»

Делает это:

   .PostUrlEncodedAsync(new
     {
        amount = 1000,
        allowed_source_types = new[] { "card_present" },
        capture_method = "manual",
        currency = "usd"
     });

Результаты в этом сообщении:

сумма = 1000 & allow_source_types = card_present & capture_method = manual¤cy = usd

Поставщик API жалуется, что опубликованный мною массив недопустим.Когда я сделаю это:

    .PostUrlEncodedAsync(
             "amount=1000&allowed_source_types[]=card_present&capture_method=manual&currency=usd"
    );

Результаты будут опубликованы:

amount = 1000 & allow_source_types [] = card_present & capture_method = manual¤cy = usd

Поставщик API рад, и я получаю ожидаемые результаты.

Вопрос: Является ли это ошибкой, и должен ли параметр allow_source_types включить [] , как было изначально подробно описано здесь ?

1 Ответ

0 голосов
/ 04 февраля 2019

Это не ошибка.Как упоминалось в комментариях, не существует стандарта для URL-кодирования коллекции, но делать это так:

x[]=1,2,3

гораздо реже, чем делать это так:

x=1&x=2&x=3

Последнее , как Flurl реализовал его .

Проблема, связанная с тем, как это требуется API, заключается в том, что [] недопустимы в идентификаторе C #, поэтому типичная запись объектане сработаетНо Flurl особо относится к Dictionary объектам, поэтому лучше всего сделать это следующим образом:

.PostUrlEncodedAsync(new Dictionary<string, object>
{
    ["amount"] = 1000,
    ["allowed_source_types[]"] = "card_present", // or string.Join(",", allowedSourceTypes)
    ["capture_method"] = "manual",
    ["currency"] = "usd"
 });
...