Post 'x-www-form-urlencoded' 满足 aurelia-fetch-client

Post 'x-www-form-urlencoded' content with aurelia-fetch-client

问题很简单:我如何 post x-www-form-urlencoded 满足于 Aurelia Fetch 客户端?

我需要将 post 变成一个使用 OWIN 和 Katana 进行身份验证的简单 ASP.NET Web API 服务器。

我已经尝试过的示例:

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
    });

显然,这没有按预期工作。 post处理示例中显示的数据的正确方法是什么?

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);
}