Пример #1
0
        public async Task Invoke(HttpContext httpContext, Func <Task> next)
        {
            if (httpContext?.TraceIdentifier != null)
            {
                httpContext.Response.Headers["RequestId"] = httpContext.TraceIdentifier;
            }

            var requestData = new
            {
                Connection = new
                {
                    httpContext.Connection.Id,
                    LocalIpAddress = httpContext.Connection.LocalIpAddress.ToString(),
                    httpContext.Connection.LocalPort,
                    RemoteIpAddress = httpContext.Connection.RemoteIpAddress.ToString(),
                    httpContext.Connection.RemotePort,
                },
                httpContext.Request.QueryString,
                User              = httpContext.User?.Identity?.Name,
                RequestMethod     = httpContext.Request.Method,
                RequestPath       = httpContext.Request.Path.Value,
                RequestStatusCode = httpContext.Response?.StatusCode,
                RequestId         = httpContext?.TraceIdentifier
            };

            using (_logger.BeginScope(requestData))
                using (var timer = _logger.StartTimer("RequestTime"))
                {
                    await next();

                    timer.Add("StatusCode", httpContext.Response?.StatusCode);
                }
        }