【问题标题】:Http request to parse server using Angular HttpClient使用 Angular HttpClient 解析服务器的 Http 请求
【发布时间】:2018-07-23 18:15:33
【问题描述】:

我试图使用解析服务器的 REST API,所以在它的文档中,他们写道: 要在 Parse 上创建新对象,请将 POST 请求发送到包含对象内容的类 URL。例如,要创建上述对象:

curl -X POST \
-H "X-Parse-Application-Id: ${APPLICATION_ID}" \
-H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore

我测试了它并且它工作正常所以我想通过angular HttpClient使用这个方法,然后我写了这个代码:

let url = 'https://parseapi.back4app.com/classes/test';
const httpOptions = {
headers: new HttpHeaders({

  'X-Parse-Application-Id': '6mK3kDvzuLeyJojS9yRGYr6JxmuDtapGhwmUflqy',
  'X-Parse-REST-API-Key': '########################################',
  'Content-Type':  'application/json'
 })
 };
    let params = new HttpParams();
    params = params.set('score', '1337');
    params = params.append('playername', 'mohy');
    this.httpClient.post(url,params,httpOptions).subscribe(data =>{
      console.log(data);

    },err => {
      alert(err.message);
    });

}

当我使用 curl 时,它可以正常工作,但如果我使用 HttpClient,我会收到此错误:https://parseapi.back4app.com/classes/test 的 Http 失败响应:400 Bad Request

我该如何解决这个问题?

【问题讨论】:

  • HttpParams 用于 URL 查询参数,而不是请求正文;你最终发送了什么请求?
  • 它可能会这样工作; params = params.set('score', '1337').set('playername', 'mohy');

标签: angular ionic-framework post httprequest


【解决方案1】:

HttpParams 对象序列化为编码字符串 URL-query-string (?score=1337&playername=mohy) 格式,并且内容类型提到的这种无效的 json 格式。

let url = 'https://parseapi.back4app.com/classes/test';
const httpOptions = {
 headers: new HttpHeaders({
   'X-Parse-Application-Id': '6mK3kDvzuLeyJojS9yRGYr6JxmuDtapGhwmUflqy',
   'X-Parse-REST-API-Key': '########################################',
   'Content-Type':  'application/json'
  })
 };

let body = {
  score: '1337',
  playername: 'mohy'
 }

this.httpClient.post(url,JSON.stringify(body),httpOptions).subscribe(data =>{
   console.log(data);
 },err => {
      alert(err.message);
 });
}

如果你想使用get 方法并将参数作为URL-query-string

 let params = new HttpParams();
    params = params.set('score', '1337');
    params = params.append('playername', 'mohy');

    this.httpClient.get(url,{params},httpOptions).subscribe(data =>{
      console.log(data);
    },err => {
      alert(err.message);
    });

【讨论】:

  • 1.解释您所做的更改以及更改的原因会很有帮助;和 2. 你不需要自己把身体串起来。
  • 是的,请给我们解释一下这里到底是做什么的,如果我想使用--data-urlencode,需要改变什么?
  • 我已经更新了答案,希望我能在这里帮助@MohyFahim
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 2020-01-20
  • 2017-03-07
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多