Как отправить строку в тело запроса на сообщение с помощью Angular 4.3 HttpClient?
У нас есть.net WebAPI, который ищет строку пути к файлу в теле почтового запроса и возвращает соответствующее изображение. Я изо всех сил пытаюсь передать ему строку из Angular 4.3, используя новый httpClient. Является ли это возможным? Конечная точка используется другими вещами, поэтому я действительно не хочу создавать "модель"... строки, чтобы я мог в основном дублировать ее, но, если это возможно, передать ее 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',
})
}
Должно быть легко достичь?
Ответы
Ответ 1
С вашим кодом почти все хорошо. Основной проблемой является заголовок Content-Type
. Если вы хотите отправить строку в .NET
REST API с аннотацией [FromBody]
и использовать значение заголовка application/json
вы должны добавить ""
к вашему параметру пути, например "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',
})
Ответ 2
Вы можете получить 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',
})
Ответ 3
Я просто попробовал другой альтернативный путь с помощью этих опций и направил сообщение String path 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);
});
});
}
Я был бы рад, если он сработает. Спасибо