我有一个瘦的前端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的空请求正文。
我如何转发整个请求主体,而不必对其进行分析并重新组装新的请求主体?
您需要设置msg.Content.ContentLength
才能正常工作。 request.Body
流通常是不可搜索的,如果是这种情况,则StreamContent
sets its own length to zero。将请求中的ContentType
和其他内容标头复制到msg.Content
中也是一个好主意。
NB:如果传入请求未设置ContentLength
-即,如果它使用分块传输编码-并且您无法从其他来源弄清楚它,则StreamContent
根本无法工作。