Публикация содержимого x-www-form-urlencoded с помощью aurelia-fetch-client

Вопрос прост: как мне опубликовать x-www-form-urlencoded довольны клиентом Aurelia Fetch?

Мне нужно сделать сообщение на простом сервере ASP.NET Web API, который использует OWIN и Katana для аутентификации.

Пример того, что я уже попробовал:

var loginDTO = new FormData();
loginDTO.append('grant_type', 'password');
loginDTO.append('email', 'test');
loginDTO.append('password', 'test');

return this.http
    .fetch(config.router.token, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: loginDTO
    });

Очевидно, что это не сработало как задумано. Как правильно разместить данные, представленные в примере?

2 ответа

Решение

Aurelia-fetch-client построен на спецификации Fetch, и кажется, что Fetch всегда отправляет FormData как Content-Type: multipart/form-data,

Чтобы обойти это, вы должны преобразовать параметры в строку запроса, а затем установить тип содержимого на x-www-form-urlenconed, Вы можете использовать jQuery или пользовательскую функцию для преобразования объекта в строку запроса. Как это:

//jQuery.param returns something like ?param=1&param2=2 and so on
//params = a plain javascript object that contains the parameters to be sent
this.http.fetch(url, {
  body: $.param(params),
  method: 'post',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})
.then(response => response.json())
.then(response => { 
   //your magic here
});

Не очень хорошее решение, я знаю, но это самый простой способ, который я нашел до сих пор.

Вы бы использовали FormData следующим образом:

function sendForm() {
  var formData = new FormData();
  formData.append('email', 'test@test.com');
  formData.append('password', '123456');

  http.post(url, formData);
}
Другие вопросы по тегам