我正在尝试发出POST请求,但我无法让它工作:
testRequest() {
var body = 'username=myusername?password=mypassword';
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http
.post('/api',
body, {
headers: headers
})
.subscribe(data => {
alert('ok');
}, error => {
console.log(JSON.stringify(error.json()));
});
}
我基本上想要复制这个http请求(不是ajax),就像它是由html表单生成的:
网址:/ api
参数:用户名和密码
8 回答
我认为
application/x-www-form-urlencoded
内容类型的正文不正确 . 你可以尝试使用这个:希望它对你有帮助,蒂埃里
更新 Angualar 4.3+
现在我们可以使用
HttpClient
而不是Http
指南是here
示例代码
Deprecated
或者你可以这样做:
Update Oct/2017
从 angular4+ 开始,我们不需要
headers
或.toString()
个东西 . 相反,你可以像下面的例子那样做POST / PUT方法
GET / DELETE方法
对于JSON
application/json
Content-Type在Angular2的更高版本中,如果将正确类型的对象作为
body
传递,则无需手动设置Content-Type
标头并对主体进行编码 .你只需要这样做
这样,角度将为您编码身体,并将设置正确的
Content-Type
标头 .附:不要忘记从
@angular/http
导入URLSearchParams
,否则它将无效 .所以只是为了得到一个完整的答案:
对于那些使用HttpClient而不是Http的人来说,这些答案都已经过时了 . 我开始疯狂地思考,“我已经完成了URLSearchParams的导入,但是如果没有.toString()和显式 Headers ,它仍然无效!”
使用HttpClient,使用HttpParams而不是URLSearchParams并注意
body = body.append()
语法,以便在我们使用不可变对象时在主体中实现多个参数:如果有人正在努力 angular version 4+ (mine was 4.3.6) . 这是为我工作的示例代码 .
首先添加所需的导入
然后为api功能 . 这是一个登录样本,可以根据您的需要进行更改 .
我使用多个参数的每个方法都遇到问题,但它对单个对象很有效
API:
角度:
当我试图做类似的事情时,我降落在这里 . 对于application / x-www-form-urlencoded内容类型,您可以尝试将其用于正文:
你尝试过的,分配给body的值将是一个字符串 .