Axios: отправлять переменную в теле запроса POST, а не в params - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю над проектом, в котором мне нужно отправлять переменные аутентификации в теле запроса, а не в качестве параметров.Я вижу, что запрос POST отправляет второй параметр в качестве тела в документации, но я получаю ошибку в службе .NET.

_response: "{"error":"invalid_clientId","error_description":"ClientId should be sent."}"

Я получал ту же ошибку в PHP, когда я не былотправить параметры в теле, но значения все те же, что я использую в этом запросе POST, поэтому я знаю, что параметры и значения верны.

Вот что у меня есть:

axios.post(`https://myawesomeapi.com`, 
{username:this.state.email_address, password:this.state.password, grant_type:'password', client_id:'thisAppsClientID'}, 
{headers: { 'content-type':'application/x-www-form-urlencoded', 'accept':'application/json' }}
).then( res => {
  let result = res.data;
  console.log(result);
})
.catch( (e) => {  console.log(e.response); });

Когда я console.log и проверяю ответ об ошибке, я вижу это:

config:
   adapter: ƒ xhrAdapter(config)
   data: "{"username":"myusername","password":"mypassword!","grant_type":"password","client_id":"thisAppsClientID"}"
   headers: {Accept: "application/json, text/plain, */*", Content-Type: "application/x-www-form-urlencoded"}
...

Вот что у меня в жрете, которое работает, если это помогает:

    $this->client->request('post', 'https://myawesomeapi.com',
['form_params' => ['username' => $input['username'], 'password' => $input['password'], 'client_id'=>'thisAppsClientID', 'grant_type'=>'password']],
['headers' => ['accept' => 'application/json','Content-Type' => 'application/x-www-form-urlencoded']]);

Является лиимя пользователя, пароль, grant_type и client_id передаются как тело?Я не испортил, как отправить заголовки?Спасибо и дайте мне знать!

1 Ответ

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

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

const dataForm = new FormData();
dataForm.append('username', this.state.email_address);
dataForm.append('password', this.state.password);
dataForm.append('grant_type', 'password');
dataForm.append('client_id', 'thisAppsClientID');

axios.post('https://myawesomeapi.com', dataForm)
.then(res => {
  let result = res.data;
  console.log(result);
})
.catch(e => { 
  console.log(e.response); 
});
...