C# 在ASP.NET内核中高效地转发来自内部HttpClient调用的内容
我正在从ASP.NET核心应用程序调用内部HTTP服务。来自此服务的响应消息可能非常大,因此我希望尽可能高效地转发它们。如果可能的话,我只想将内容“映射”到控制器响应,或者换句话说,“通过管道将来自服务的流传输到从控制器输出的流” 到目前为止,我的控制器方法只是调用服务:C# 在ASP.NET内核中高效地转发来自内部HttpClient调用的内容,c#,asp.net-core,.net-core,dotnet-httpclient,C#,Asp.net Core,.net Core,Dotnet Httpclient,我正在从ASP.NET核心应用程序调用内部HTTP服务。来自此服务的响应消息可能非常大,因此我希望尽可能高效地转发它们。如果可能的话,我只想将内容“映射”到控制器响应,或者换句话说,“通过管道将来自服务的流传输到从控制器输出的流” 到目前为止,我的控制器方法只是调用服务: [HttpPost] public Post([FromBody]SearchQuery searchQuery) { var response = _searchClient.Search(searchQuery);
[HttpPost]
public Post([FromBody]SearchQuery searchQuery)
{
var response = _searchClient.Search(searchQuery);
// ?
}
该服务由HttpClient实例调用。这里(作为一个例子)我只返回HttpContent,但当然我可以返回完全读取和序列化的正文(我显然不想要):
公共异步任务搜索(SearchQuery)
{
var content=newstringcontent(TsearchQuery,Encoding.UTF8,“application/json”);
var response=wait_httpClient.PostAsync(“_search”,content);
返回响应。内容;
}
返回内容是否高效快速?如何将控制器方法中的内容传递给响应?ASP.NET核心是否在下面创建流?或者我应该显式地处理代码中的流吗?您可以从操作返回
流,ASP.NET Core MVC将有效地将其写入响应体
[HttpPost]
公共异步任务发布([FromBody]SearchQuery)
{
var response=await\u searchClient.Search(searchQuery);
return wait response.ReadAsStreamAsync();
}
根据我的经验,按照David的建议通过响应流是可行的,但不会维护HTTP状态代码。您必须添加以下行:
Response.StatusCode = (int)response.StatusCode;
提供复制完整HttpResponseMessage的替代方法
Response.StatusCode = (int)response.StatusCode;