ax ios использование аргумента сервера данных - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь включить ios для связи с удаленным сервером. Если я использовал следующий формат, мой сервер, кажется, никогда не анализирует аргументы данных

axios({
    url: API_URL + 'oauth/token',
    method:'post',
    data: {
        grant_type: 'password',
        username: user.username,
        password: user.password,
        scope: 'webclient'
          },
    auth: {
        username: 'foo',
        password: 'foobar'
    },
    responseType: 'json'
  })

Но если я использую вульгарный формат

axios({
    url: API_URL + 'oauth/token',
    method: 'post',
       data:'grant_type=password&username='+user.username+'&password='+user.password+'&scope=webclient',
    auth: {
        username: 'foo',
        password: 'foobar'
    },
    responseType: 'json'
  })

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

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Если вы передадите объект в data, то Ax ios закодирует его как JSON, а не данные, закодированные в форме URL (именно это использует ваше ручное кодирование и, следовательно, предположительно, то, что ожидает ваш сервер).

В документации есть несколько примеров программного кодирования данных формы:

const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

Убедитесь, что вы также установили 'application/x-www-form-urlencoded' в качестве Content-Type заголовок запроса.

0 голосов
/ 17 февраля 2020

Как указывалось в обоих предыдущих ответах, проблема заключается в типе данных, которые сервер готов принять, если для параметра Content-Type не задано значение по умолчанию Json.

В моем случае мой сервер настроен на прием соединения в стиле кодирования URL. Отправка его как объекта «data» недопустима, чаще всего он отправляется с использованием params. Поскольку я не отправляю никакие данные с использованием данных: кажется, что ax ios решает, что он может удалить любую попытку установить тип контента.

Я использую следующий код, который удаляет эти вульгарные данные настроить

url: API_URL + 'oauth/token',
    method:'post',
       params: {
        grant_type: 'password',
        username: user.username,
        password: user.password,
        scope: 'webclient'
          },
    auth: {
        username:'foo',
        password:'foobar'
    },
    responseType:'json',
  })
...