我们有一个.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',
})
}
要成为一件容易的事吗?
答案 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);
});
});
}
如果有效,我会很高兴。谢谢