【发布时间】:2017-01-20 10:41:43
【问题描述】:
我有使用 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* 使其可供所有控制器使用,这样我们就不必将其注入任何控制器?
这里有什么更好的选择?
【问题讨论】:
-
stackoverflow.com/help/tagging 请不要在问题标题中强行添加标签
标签: asp.net-core asp.net-core-webapi