gpt4 book ai didi

c# - Web api 方法调用另一个流内容 web api 方法?

转载 作者:行者123 更新时间:2023-11-30 13:38:36 28 4
gpt4 key购买 nike

这是我的情况,我有两个 Web API 服务。第一个有一个处理一些数据的方法,当部分数据准备就绪时,它会将其推送到流中。

public HttpResponseMessage Get( )
{
var response = Request.CreateResponse( );
response.Content = new PushStreamContent( WriteToStream );
return response;
}

public async void WriteToStream( Stream outputStream, HttpContent content, TransportContext context )
{
.......
}

第二个 Web API 在 Controller 中有一个方法调用第一个 Web API。它必须从流中读取部分并用它做一些事情并将 i 放入它自己的流中:

public HttpResponseMessage Get( )
{
Stream stream = null;

using( HttpClient httpClient = new HttpClient( ) )
{
httpClient.Timeout = TimeSpan.FromMilliseconds( Timeout.Infinite );
HttpRequestMessage request = new HttpRequestMessage( HttpMethod.Get, "http://localhost/fistWebApi/" );

var response = httpClient.SendAsync( request, HttpCompletionOption.ResponseContentRead );

var content = response.Result.Content.ReadAsStreamAsync( );

stream = content.Result;
}

var msg = Request.CreateResponse( );

msg.Content = new PushStreamContent( WriteToStream );

return msg;
}
public async void WriteToStream( Stream outputStream, HttpContent content, TransportContext context )
{
.......
}

问题是我不知道如何同步调用 SendAsync ReadAsStreamAsync。现在它不会等待,并且 stream 在尝试使用它时未正确初始化。我希望第二种方法的代码等到第一种方法将部分数据放入流中。我尝试使用 ContinueWith 但后来我没能做到。我知道解释有点模糊,如果有任何问题我会尝试更深入地解释。

最佳答案

试试这个...

 public HttpResponseMessage Get()
{

using (HttpClient httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://www.google.ca");

return httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead)
.ContinueWith((t) =>
{
return new HttpResponseMessage()
{
Content = t.Result.Content
};
}).Result;

}

}

上面的代码对我有用。这样做的缺点是,因为您使用了 HttpCompletionOption.ResponseContentRead,来自远程服务的整个有效负载将在返回给您的客户端之前被缓冲。

如果您改为使用 HttpCompletionOption.ResponseHeadersRead,则 t.Result.Content 将返回一个网络流。这样,当您的客户端拉取响应流时,它将直接从远程资源流式传输。我假设这就是您当前正在尝试对要返回的 PushStreamContent 执行的操作。

关于c# - Web api 方法调用另一个流内容 web api 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848509/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com