Просто найдено одно решение. Замена исходного потока новым потоком, содержащим данные.
public override Task Invoke(IOwinContext context)
{
return Task.Run(() => {
string body = new StreamReader(context.Request.Body).ReadToEnd();
// log body
byte[] requestData = Encoding.UTF8.GetBytes(body);
context.Request.Body = new MemoryStream(requestData);
this.Next.Invoke(context);
});
}
Если вы имеете дело с большими объемами данных, я уверен, что FileStream
также будет работать как замена.