使用 HttpClient 转发整个接收到的请求 "as is"
Forwarding the entire received request "as is" using HttpClient
我有一个瘦前端 API Web 服务,它对接收到的数据进行一些预处理,然后使用 HttpClient 将数据发送到我的后端 API Web 服务。
有一些复杂的情况,当请求包含带有 JSON 和文件的多部分数据时,我根本不想在前端解析它。后端将完成这项工作。
所以,我想接受请求 "as is" - 尽可能原始(不关心它的内容以及它是否是多部分的)并将它转发到后端 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
才能正常工作。将请求中的 ContentType
和其他内容 headers 复制到 msg.Content
也是一个好主意,以便您的后端服务知道如何解析它。
我有一个瘦前端 API Web 服务,它对接收到的数据进行一些预处理,然后使用 HttpClient 将数据发送到我的后端 API Web 服务。
有一些复杂的情况,当请求包含带有 JSON 和文件的多部分数据时,我根本不想在前端解析它。后端将完成这项工作。
所以,我想接受请求 "as is" - 尽可能原始(不关心它的内容以及它是否是多部分的)并将它转发到后端 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
才能正常工作。将请求中的 ContentType
和其他内容 headers 复制到 msg.Content
也是一个好主意,以便您的后端服务知道如何解析它。