HttpClient将参数对象附加到GET请求

时间:2017-12-18 14:24:28

标签: ionic-framework angular-httpclient

我非常喜欢使用Ionic或Angular的菜鸟。因此,作为备忘单我使用离子超级启动器模板(链接如下)。 我正在尝试向我的API提出请求,如果我这样做,它就可以找到:

this.api.get('user/'+this.user.userId+'/entries?include=stuff&access_token=TOKEN');

但是当我将url params放入一个对象时它会停止工作:

let options = {
  'include':'stuff',
  'access_token':'TOKEN'
}
this.api.get('user/'+this.user.userId+'/entries', options);

我得到的唯一错误是"未经授权的请求"因为包含访问令牌的选项对象未附加到URL。


在离子超级初学者模板中,providers/api/api.ts为我的参数对象中的每个键调用.set()

if (params) {
  reqOpts.params = new HttpParams();
  for (let k in params) {
    reqOpts.params.set(k, params[k]);
  }
}

但根据Angular大学的说法,这是不可能的,因为" HTTPParams是不可变的"。 如果这样做确实是错误的,我不相信它会出现在离子模板中。我也不相信我是第一个遇到这个问题的人。

但是,我被困在这里所以任何帮助都会受到赞赏。



与Angular大学的链接: https://blog.angular-university.io/angular-http/#httprequestparameters

离子超级起动器的链接: https://github.com/ionic-team/starters/tree/master/ionic-angular/official/super

1 个答案:

答案 0 :(得分:1)

我想我自己想出来了:

如果我写(在我的src/providers/api/api.ts

reqOpts.params = reqOpts.params.append(k, params[k]);

而不是

reqOpts.params.set(k, params[k]);

它有效。

如果您使用的是环回API,则可能有以下嵌套对象:

let options = {
  "filter": {
    "order": "date DESC"
  },
  "access_token":this.user._accessToken
};

这不起作用。试着改为:

let options = {
   "filter": '{"order":"date DESC"}',
   "access_token":this.user._accessToken
};