Публикация содержимого 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¶m2=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);
}