選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

CorrelationMiddleware.cs 1.3KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. namespace Diligent.WebAPI.Host.Middlewares
  2. {
  3. [ExcludeFromCodeCoverage]
  4. public class CorrelationMiddleware
  5. {
  6. private const string DefaultHeader = "X-Correlation-ID";
  7. private readonly RequestDelegate next;
  8. private readonly ILogger<CorrelationMiddleware> logger;
  9. public CorrelationMiddleware(RequestDelegate next, ILogger<CorrelationMiddleware> logger) => (this.next,this.logger) = (next,logger);
  10. public async Task Invoke(HttpContext context)
  11. {
  12. if (!context.Request.Headers.TryGetValue(DefaultHeader, out var correlation))
  13. {
  14. correlation = Guid.NewGuid().ToString();
  15. }
  16. context.Response.OnStarting(() =>
  17. {
  18. if (!context.Response.Headers.ContainsKey(DefaultHeader))
  19. {
  20. context.Response.Headers.Add(DefaultHeader, correlation);
  21. }
  22. return Task.CompletedTask;
  23. });
  24. using (logger.BeginScope(new Dictionary<string, object>
  25. {
  26. ["CorrelationId"] = correlation
  27. }))
  28. {
  29. context.Items.Add(DefaultHeader, correlation);
  30. await next(context);
  31. }
  32. }
  33. }
  34. }