Gre*_*che 5 c# stream owin katana
当我写回复时,Katana会跳过发送Elapsed-Time响应头.在我第一次写入流之前,如何让它为我设置标题?
public override async Task Invoke(IOwinContext context)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
await Next.Invoke(context);
stopwatch.Stop();
context.Response.Headers.Add("Elapsed-Time", new[] {stopwatch.ElapsedMilliseconds.ToString()});
}
Run Code Online (Sandbox Code Playgroud)
public override async Task Invoke(IOwinContext context)
{
await context.Response.WriteAsync("test");
}
Run Code Online (Sandbox Code Playgroud)
Gre*_*che 11
经过一些研究,答案是设置标题需要在OnSendingHeaders中发生.这可确保在写入输出流之前设置标头.例如:
public override async Task Invoke(IOwinContext context)
{
var stopwatch = new Stopwatch();
context.Response.OnSendingHeaders(x =>
{
stopwatch.Stop();
context.Response.Headers.Add("X-Processing-Time", new[] {stopwatch.ElapsedMilliseconds.ToString()});
}, null);
stopwatch.Start();
await Next.Invoke(context);
stopwatch.Stop();
}
Run Code Online (Sandbox Code Playgroud)