This repository was archived by the owner on Dec 18, 2018. It is now read-only.

Description
This is a contrived example to illustrate the point:
app.Use(next => context =>
{
if (context.Response.Body is MemoryStream)
{
throw new Exception("Wrong stream type in context.Response.Body");
}
context.Response.Body = new MemoryStream();
return context.Response.WriteAsync("Hello, world!");
});
Run the application and browse to it. The first request returns nothing (content was written to the MemoryStream). Subsequent requests will hit the Exception.
The real-world case is when the Body stream is decorated for a given request. The decorator stream will be re-used for a subsequent request, which could result in re-decorating the stream, and ultimately produce a long chain of decorators.
It appears that Kestrel is trying to be efficient by re-using its underlying Stream instances. But the reusable instances are being replaced, with unintended consequences for future requests.