使用HttpClient按原样转发整个接收到的请求

问题描述 投票:0回答:1

我有一个瘦的前端API Web服务,它对接收到的数据进行一些预处理,然后使用HttpClient将数据发送到我的后端API Web服务。

在某些复杂的情况下,请求包含带有JSON和文件的多部分数据,而我根本不想在前端进行解析。后端将完成这项工作。

因此,我想按原样接受请求-尽可能原始(不关心其内容以及它是否是多部分的,仅将其转发到后端API。

我尝试了以下操作:

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

但是后端Web服务接收到一个长度为0的空请求正文。

我如何转发整个请求主体,而不必对其进行分析并重新组装新的请求主体?

c# asp.net-core dotnet-httpclient
1个回答
0
投票

您需要设置msg.Content.ContentLength才能正常工作。 request.Body流通常是不可搜索的,如果是这种情况,则StreamContent sets its own length to zero。将请求中的ContentType和其他内容标头复制到msg.Content中也是一个好主意。

NB:如果传入请求未设置ContentLength-即,如果它使用分块传输编码-并且您无法从其他来源弄清楚它,则StreamContent根本无法工作。

© www.soinside.com 2019 - 2024. All rights reserved.