我曾经在Angular 1中遇到相似的问题,所以我知道如何实现,只是缺少最后一步。
就像上一次一样,我们应用程序的后端接受类型为application/x-www-form-urlencoded
的请求,并且像Angular 1一样,Angular 2也会将它们发送为application/json
类型。
我在ng1中所做的是,在配置文件中修改http提供程序,使其在每个请求的正文中运行urlencode。
我在ng2中看到有https://angular.io/docs/ts/latest/api/http/BaseRequestOptions-class.html一个BaseRequestOptions
类,我想这个类专门为此而设计,只是文档有点欠缺,所以我不确定如何正确实现它(我也是TypeScript新手)。
我该如何提供此内容,以便我的每个post
和其他请求最终都以urlencoded
形式发送(我还希望将函数运行在正文上,以便它实际上成为urlencode)。
另外:为什么没有更简单的选项呢?因为到目前为止,我可以看到ASP.Net和Flask(我想许多其他框架也是如此)默认不支持application\json
?
编辑:我制作了一个自定义函数,我在POST主体中发送的每个对象上使用它,但我希望有一个更简单,更通用的解决方案。
import { URLSearchParams } from 'angular2/http';
export function urlEncode(obj: Object): string {
let urlSearchParams = new URLSearchParams();
for (let key in obj) {
urlSearchParams.append(key, obj[key]);
}
return urlSearchParams.toString();
}
然后我像这样使用它
this.http.post('http://localhost:5000/user/auth/login', urlEncode(data))