怎么让angular httpclient.post请求的body参数为键值对的形式?

发布于 2022-09-06 08:21:38 字数 762 浏览 7 评论 0

使用post请求时,传入的body参数是一个对象,得到的结果是这样:
图片描述
我希望他是这样:
图片描述
httpService中的代码:

 private headers = new HttpHeaders({
     "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
  });
login() {
    let bo = {
      a: "参数1",
      b: "参数2"
    };
    this.http
      .request(
        new HttpRequest("POST", "api/search/suggest/multimatch", bo, {
          headers: this.headers
        })
      )
      .subscribe(re => {
        console.log(re);
      });
   }

求哪位大佬指点指点。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

入怼 2022-09-13 08:21:39

主要是因为前后端content-type设置不一致引起的;
在第三个参数中设置
headers: new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded'})
可以解决此问题

仙女 2022-09-13 08:21:39

请问下,解决了吗?我目前也是。post后php拿不到参数

独孤求败 2022-09-13 08:21:39
// 参数类型声明
interface ParamsType  {
  [propName: string]: any;
}


  /**
   * body为 urlencoding 的Post
   * @param _url|string 请求目标URL
   * @param _params|ParamsType 参数对象
   */
  Post(_url: string, _params: ParamsType): Observable<any> {
    const URL = environment.baseURL + _url;
    let messageId = this.commonService.showResponseMsg(this.ResponseMsgContent.add);
    const params = new HttpParams({
      fromObject: _params
    });
    return this.httpClient.post(URL, params, {
      headers: new HttpHeaders({
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
      })
    }).pipe(
      map((res: HttpResponse) => {
        this.message.remove(messageId);
        if (res.code === StateCode.ok) {
          this.message.success(res.msg);
          return res;
        } else {
          this.message.error(res.msg);
        }
      }),
      catchError(this.handleError)
    );
  }

代码如上,最重要的代码就是使用 HttpParams 将对象转变为键值对,然后放进 HttpClient 的 post 函数的第二个参数,同时设置 HttpHeaders

卷耳 2022-09-13 08:21:39

使用$.param(data)为body.

this.http.post("api/search/suggest/multimatch", $.param(data), {
        params:  params,
        headers: this.headers
      })
      .subscribe(re => {
        console.log(re);
      });
 http://blog.csdn.net/maoguiyou/article/details/51891499
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文