【发布时间】:2018-08-15 21:26:42
【问题描述】:
我有 3 个微服务并尝试创建关联 ID 以跟踪每个日志问题。如果请求到来时 corrID 不为空,那么我设置它。如果不是,则生成它。然后传递到下一个。我想查看 3 个服务日志的 corrId。如果我使用下面的代码一切正常。但是招摇是行不通的。
例外:标头是只读响应已经开始。
public async Task Invoke(HttpContext context)
{
string key = context.Request.Headers.Keys.FirstOrDefault(n => n.Equals("Correlation-ID"));
var corrID = context.RequestServices.GetService<CorrelationID_Global>();
if (corrID != null)
{
if (!string.IsNullOrWhiteSpace(key))
{
corrID.ID = context.Request.Headers[key].ToString();
}
else
{
corrID.ID = Guid.NewGuid().ToString();
}
}
await _next(context);
if (!string.IsNullOrWhiteSpace(corrID?.ID))
{
context.Response.Headers.Add("Correlation-ID", corrID.ID);
}
}
为了解决招摇问题,我使用此链接更改最后一个 if 语句:Add Response Headers to ASP.NET Core Middleware
if (!string.IsNullOrWhiteSpace(corrID?.ID))
{
context.Response.OnStarting((state) =>
{
context.Response.Headers.Add("Correlation-ID", corrID.ID);
return Task.FromResult(0);
},null);
}
但是,这次我在响应的服务日志中看不到相关 ID。因此请求日志的 corrID 照常更改。我该如何处理这个问题?谢谢。
【问题讨论】:
标签: c# asp.net-core