如何使用Angular 4.3 HttpClient在post请求的正文中发布字符串?

时间:2017-11-17 16:08:30

标签: angular angular4-httpclient

我们有一个.net WebAPI,它在post请求的主体中查找文件路径字符串并返回相应的图像。我正在努力使用新的httpClient成功地从Angular 4.3传递一个字符串。可能吗?其他东西正在使用端点,所以我真的不想创建一个字符串的'模型',所以我基本上可以复制它,但如果可能的话,将它传递给json。

WebAPI方法签名:

public HttpResponseMessage ImagesFromPaths(HttpRequestMessage request, [FromBody] string path)

当前的服务方式:

getImage(path: string): Observable<any> {

  return this.http.post(
    `${apiUrl}`,
    { path },
    { headers: new HttpHeaders({
      'Content-Type': 'application/json',
    }), responseType: 'blob',
  })
}

要成为一件容易的事吗?

3 个答案:

答案 0 :(得分:18)

您的代码几乎一切都很好。主要问题是.NET标题。如果要使用[FromBody]注释向application/json REST API发送字符串并使用""标头值,则应将"test_value"添加到路径参数中,例如return this.http.post( `${apiUrl}`, `\"${path}\"` , { headers: new HttpHeaders({ 'Content-Type': 'application/json', }), responseType: 'blob', })

x-www-form-urlencoded

您还可以使用return this.http.post( `${apiUrl}`, `=${path}` , { headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded', }), responseType: 'blob', }) 标头值。然后你必须通过你的参数以这种方式请求身体:

TableLayoutPanel

答案 1 :(得分:5)

您可以通过删除path属性

query获取[fromBody]
public HttpResponseMessage ImagesFromPaths(HttpRequestMessage request, string path)

以及post请求${apiUrl}/${path}中的发送后路径:

return this.http.post(
  `${apiUrl}/${path}`,
  { headers: new HttpHeaders({
    'Content-Type': 'application/json',
  }), responseType: 'blob',
  })

答案 2 :(得分:0)

我只是通过这个选项尝试了另一种改变方式,并将发布字符串路径Json指向post方法的主体。

 getImage(path: string) {
            let headers = new Headers({ 'Content-Type': 'application/json' });
            let options = new RequestOptions({ headers: headers });

            return new Promise((resolve, reject) => {
                this.http.post('${apiUrl}',path, options)
                .map((res) => res.json()).share()
                .subscribe(res => {
                  resolve(res)
                }, (err) => {
                  reject(err);
                });
            });
          }

如果有效,我会很高兴。谢谢