Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET内核中高效地转发来自内部HttpClient调用的内容_C#_Asp.net Core_.net Core_Dotnet Httpclient - Fatal编程技术网

C# 在ASP.NET内核中高效地转发来自内部HttpClient调用的内容

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);

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

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

[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;