Пересылка всего полученного запроса «как есть» с использованием HttpClient - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть тонкий веб-сервис API внешнего интерфейса, который выполняет некоторую предварительную обработку полученных данных, а затем отправляет данные в мой веб-сервис API внутреннего интерфейса с помощью HttpClient.

В некоторых сложных случаях запрос содержит данные, состоящие из нескольких частей. с JSON и файлами, и я вообще не хочу разбирать его во внешнем интерфейсе. Бэкэнд выполнит эту работу.

Итак, я хотел бы принять запрос «как есть» - как можно более сырым (не заботясь о его содержимом и о том, является ли он составным или нет) и просто перенаправить его на backend API.

Я попробовал следующее:

var msg = new HttpRequestMessage(HttpMethod.Post, resourceUrl);
msg.Content = new StreamContent(request.Body);
var apiResponse = await _httpClient.SendAsync(msg);

, но бэкэнд-веб-служба получает пустое тело запроса с длиной 0.

Как переслать полное тело запроса без необходимости его анализа и повторной сборки нового тела запроса?

1 Ответ

1 голос
/ 04 февраля 2020

Вам нужно установить msg.Content.ContentLength для правильной работы. Также неплохо скопировать ContentType и другие заголовки содержимого из запроса в msg.Content, чтобы ваш бэкэнд-сервис знал, как его проанализировать.

...