Скопируйте данные содержимого запроса HttpContext в новый запрос - PullRequest
0 голосов
/ 25 сентября 2018

Я создаю прокси-сервер APIGateway для нашей платформы микросервисов ядра dotnet.

Я использовал https://medium.com/@mirceaoprea/api-gateway-aspnet-core-a46ef259dc54 в качестве отправной точки, при этом все запросы обрабатываются с помощью

app.Run(async (context) =>
{
   // Do things with context
});

У вас есть контекст для запроса к шлюзу, но как мне скопировать данные содержимого из запроса к шлюзу на новый запрос, который я собираюсь сделать к моему API?

Я вижу возможность установитьсодержимое запроса к объекту HttpContent:

newRequest.Content = new StringContent(requestContent, Encoding.UTF8, "application/json");

Но я хочу, чтобы мое приложение выполняло загрузку файлов через шлюз, единственный способ, который я нашел, - это создать MultipartFormDataContent, но все примеры того, каксоздайте MultipartFormDataContent, используя IFormFile вместо HttpContext.

Можно ли просто скопировать содержимое исходного запроса apigateway в мой внутренний запрос:

using (var newRequest = new HttpRequestMessage(new HttpMethod(request.Method), serviceUrl))
{
    // Add headers, etc

    newRequest.Content = // TODO: how to get content from HttpContext

    using (var serviceResponse = await new HttpClient().SendAsync(newRequest))
    {
        // handle response
    }
}

1 Ответ

0 голосов
/ 26 сентября 2018

Для этого вы можете использовать StreamContent, передавая HttpContext.Request.Body Stream в качестве фактического содержимого для использования.Вот как это выглядит в вашем примере:

newRequest.Content = new StreamContent(context.Request.Body);

Кроме того, убедитесь, что вы используете общий экземпляр HttpClient .

...