请求完成后如何记录 HttpContext 属性

问题描述 投票:0回答:1

我有控制器、后台任务和丰富器来丰富 HttpContext 的一些属性(例如 userAgent 标头)。我正在使用 .net6Serilog 3.1.1 并通过 ILogger 界面进行日志记录。

[HttpGet, Route("User/{id:int}")]
public async Task<IActionResult> GetUserById(int id)
{
    var user = await _repository.GetUser(id);

    SomeBackgroundTask(user);

    _logger.LogInformation("Something happened 1."); // There is UserAgent in log

    return Ok(user);
}

public async Task SomeBackgroundTask(User user)
{
    try
    {
        await Task.Delay(10000);
    }
    catch (Exception e)
    {
        _logger.LogError(e, "Something happened 2."); // There is not UserAgent in log
    }
}

因此,当请求完成时,丰富器无法使用

_contextAccessor.HttpContext
来获取必要的请求标头。

我需要在哪里以及如何保存所需的属性,以便将它们记录在后台任务中?

c# .net asp.net-core logging serilog
1个回答
0
投票

您可以尝试在任务开始之前保存标题。

        public async Task SomeBackgroundTask()
        {
            var headers = _contextAccessor.HttpContext.Request.Headers;
            try
            {
                await Task.Delay(1000);
                var headers_after_task = headers;
            }

© www.soinside.com 2019 - 2024. All rights reserved.