我有使用 ASP.NET Core API 开发的 Web API。每个传入的请求都插入了一个自定义标头值。例如x-correlationid
。控制器使用此值记录和跟踪请求。目前我正在读取每个控制器中的值,如下所示
[Route("api/[controller]")]
public class DocumentController : Controller
{
private ILogger<TransformController> _logger;
private string _correlationid = null;
public DocumentController(ILogger<DocumentController > logger)
{
_logger = logger;
_correlationid = HttpContext.Request.Headers["x-correlationid"];
}
[HttpPost]
public async Task<intTransform([FromBody]RequestWrapper request)
{
_logger.LogInformation("Start task. CorrelationId:{0}", _correlationid);
// do something here
_logger.LogInformation("End task. CorrelationId:{0}", _correlationid);
return result;
}
}
我认为这违反了 DI 规则。
我不想读取控制器构造函数中的值,而是将值注入控制器的构造函数中。
或者
中间件可以读取x-correlationid
并*somehow*
使其可用于所有控制器,这样我们就不必将它注入任何控制器?
这里有什么更好的选择?