从ASP.NET Core中的内部HttpClient调用高效转发内容

Kna*_*ack 7 c# dotnet-httpclient .net-core asp.net-core

我正在从我的ASP.NET核心应用程序调用内部HTTP服务.来自此服务的响应消息可能非常大,因此我希望尽可能高效地转发它们.如果可能的话,我只想将内容"映射"到控制器响应 - 或者换句话说"将从服务流出的流传输到流出控制器的流".

到目前为止我的控制器方法只是调用服务:

[HttpPost]
public Post([FromBody]SearchQuery searchQuery)
{
    var response = _searchClient.Search(searchQuery);
    // ?
} 
Run Code Online (Sandbox Code Playgroud)

该服务由HttpClient实例调用.这里(作为一个例子)我只返回HttpContent,但当然我可以返回完全读取和序列化的主体(我显然不想要):

public async Task<HttpContent> Search(SearchQuery searchQuery)
{
    var content = new StringContent(TsearchQuery, Encoding.UTF8, "application/json");
    var response = await _httpClient.PostAsync("_search", content);
    return response.Content;
}
Run Code Online (Sandbox Code Playgroud)

返回内容是否有效且快速?如何将控制器方法中的内容传递给响应?ASP.NET Core是否在下面创建流?或者我应该明确处理代码中的流?

dav*_*owl 9

您可以Stream从动作返回,ASP.NET Core MVC将有效地将其写入响应主体.

[HttpPost]
public async Task<Stream> Post([FromBody]SearchQuery searchQuery)
{
    var response = await _searchClient.Search(searchQuery);
    return await response.ReadAsStreamAsync();
} 
Run Code Online (Sandbox Code Playgroud)