我正在使用 Nancy 编写一个简单的 Web 应用程序。至少一个请求会导致未知长度的流,所以我无法提供Content-Length
. 我想使用Transfer-Encoding: chunked
, 或(在这种情况下同样可以接受,Connection: close
)。
我对 Nancy 源代码进行了快速破解,并且添加Response.BufferOutput
了 , 和代码以设置HttpContext.Response.BufferOutput
为false
. 你可以在这里看到:
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/slow"] = _ => new SlowStreamResponse();
}
private class SlowStreamResponse : Response
{
public SlowStreamResponse()
{
ContentType = "text/plain";
BufferOutput = false;
Contents = s => {
byte[] bytes = Encoding.UTF8.GetBytes("Hello World\n");
for (int i = 0; i < 10; ++i)
{
s.Write(bytes, 0, bytes.Length);
Thread.Sleep(500);
}
};
}
}
它似乎没有任何效果。5 秒后立即出现响应。我已经测试了这个基于简单WebRequest
的客户端。
如何让分块输出在 Nancy 中工作?我正在使用 ASP.NET 托管,但我会对其他托管选项的答案感兴趣。
如果我使用 编写一个简单的服务器HttpListener
,我可以设置SendChunked
为true
,它会发送分块输出,我的简单客户端会正确接收分块输出。