所以我正在尝试将我的API内容流式传输到客户端,目的是尽快将数据传输到客户端。我将与另一个可能很慢完成整个请求的端点进行通信。
我遇到的问题,即使我使用StreamContent / PushStreamContent,WebAPI似乎缓冲了我得到的任何内容,并忽略了对flush的任何调用。这很烦人。我可以在那里使用客户端可以使用的数据,并且可能需要很长时间,直到另一端返回数据,所以我希望客户端至少得到它。
在我的测试中,我在从流中编写数据循环时添加了Task.Delay。根据webapi选择如何缓冲它,可能需要几分钟才能返回任何数据,即使数据在几百毫秒后写入其输出流。
似乎与HttpResponseMessage
调用HttpContent.SerializeToStreamAsync
和LimitMemoryStream
有关,我相信这是决定如何缓冲输出。
webapi中是否有任何方法可以覆盖它?例如,创建我自己的实际响应flush的实现?。
答案 0 :(得分:0)
我找到了答案here的内核。该帖子讨论的是HttpClient / HttpRequestMessage,但我相信同样的事情适用于HttpResponseMessage。您需要在请求上设置内容长度,或将TransferEncodingChunked标头设置为true。如果您不这样做,那么WebAPI 必须缓冲响应,以便它可以为您计算长度。