WebAPI 2,更改“LimitMemoryStream”

时间:2015-05-25 00:27:10

标签: c# asp.net-web-api

所以我正在尝试将我的API内容流式传输到客户端,目的是尽快将数据传输到客户端。我将与另一个可能很慢完成整个请求的端点进行通信。

我遇到的问题,即使我使用StreamContent / PushStreamContent,WebAPI似乎缓冲了我得到的任何内容,并忽略了对flush的任何调用。这很烦人。我可以在那里使用客户端可以使用的数据,并且可能需要很长时间,直到另一端返回数据,所以我希望客户端至少得到它。

在我的测试中,我在从流中编写数据循环时添加了Task.Delay。根据webapi选择如何缓冲它,可能需要几分钟才能返回任何数据,即使数据在几百毫秒后写入其输出流。

似乎与HttpResponseMessage调用HttpContent.SerializeToStreamAsyncLimitMemoryStream有关,我相信这是决定如何缓冲输出。

webapi中是否有任何方法可以覆盖它?例如,创建我自己的实际响应flush的实现?。

1 个答案:

答案 0 :(得分:0)

我找到了答案here的内核。该帖子讨论的是HttpClient / HttpRequestMessage,但我相信同样的事情适用于HttpResponseMessage。您需要在请求上设置内容长度,或将TransferEncodingChunked标头设置为true。如果您不这样做,那么WebAPI 必须缓冲响应,以便它可以为您计算长度。