首页 新闻 会员 周边 捐助

.NetCore 如何取自定义http响应标头

0
悬赏园豆:10 [已解决问题] 解决于 2021-08-08 07:50

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],取不到自定义的值 。

嗷嗷嗷啊的主页 嗷嗷嗷啊 | 初学一级 | 园豆:40
提问于:2019-08-31 08:35
< >
分享
最佳答案
0

Response.Headers[RESPONSE_HEADER_TIME] 是将响应头发送给客户端浏览器,middleware 修改请求头直接 context.Request.Headers["xxx"] = "yyy";

收获园豆:10
dudu | 高人七级 |园豆:29570 | 2019-08-31 08:41

谢谢了,request 请求头好象修改不了,有没有别的存储方法呢。

嗷嗷嗷啊 | 园豆:40 (初学一级) | 2019-08-31 09:09

博客园的这个“评论提交耗时XXX毫秒"是怎么实现的呢?

嗷嗷嗷啊 | 园豆:40 (初学一级) | 2019-08-31 09:11

@嗷嗷嗷啊: 记录请求执行时间的参考代码

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 | 园豆:29570 (高人七级) | 2019-08-31 09:52

@dudu: 谢谢, 有没有别的存储方式,我想取出这个值。

嗷嗷嗷啊 | 园豆:40 (初学一级) | 2019-08-31 11:23

@嗷嗷嗷啊: context.Items["xxx"] = "yyy";

dudu | 园豆:29570 (高人七级) | 2019-08-31 11:35

@dudu: 还是取不到。。。。

嗷嗷嗷啊 | 园豆:40 (初学一级) | 2019-09-04 06:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册