public Task InvokeAsync(HttpContext context) {
var watch = new Stopwatch();
watch.Start();
context.Response.OnStarting(() => {
watch.Stop();
context.Response.Headers[RESPONSE_HEADER_TIME] = watch.ElapsedMilliseconds.ToString();
return Task.CompletedTask;
});
return this._next(context);
}
中间件写入响应标头后,怎么取出这个值
HttpContext.Request.Headers[XX],取不到自定义的值 。
Response.Headers[RESPONSE_HEADER_TIME]
是将响应头发送给客户端浏览器,middleware 修改请求头直接 context.Request.Headers["xxx"] = "yyy";
谢谢了,request 请求头好象修改不了,有没有别的存储方法呢。
博客园的这个“评论提交耗时XXX毫秒"是怎么实现的呢?
@嗷嗷嗷啊: 记录请求执行时间的参考代码
public class RequestTimingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<RequestTimingMiddleware> _logger;
public RequestTimingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
{
_next = next;
_logger = loggerFactory.CreateLogger<RequestTimingMiddleware>();
}
public async Task InvokeAsync(HttpContext context)
{
var sw = Stopwatch.StartNew();
await _next(context);
sw.Stop();
if (sw.ElapsedMilliseconds > 5000)
{
_logger.LogError($"Request Execution Time: {sw.ElapsedMilliseconds}");
}
}
}
@dudu: 谢谢, 有没有别的存储方式,我想取出这个值。
@嗷嗷嗷啊: context.Items["xxx"] = "yyy";
@dudu: 还是取不到。。。。