Как отправить строку в тело запроса на сообщение с помощью 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);
                });
            });
          }

Я был бы рад, если он сработает. Спасибо