public async Task Invoke()

in DeviceBridge/Common/RequestLoggingMiddleware.cs [23:58]


        public async Task Invoke(HttpContext context)
        {
            var request = await FormatRequest(context.Request);
            var logger = _logger.WithProperty("cv", Utils.GuidFromString(context.TraceIdentifier));
            logger.SetProperty("path", context.Request.Path.Value);

            var regexResult = Regex.Match(context.Request.Path, @"(?<=devices\/).*?(?=\/)");
            if (regexResult.Success)
            {
                var deviceId = regexResult.Groups[0].Value;
                logger.SetProperty("deviceId", deviceId);
            }

            logger.Info(request);

            var originalBodyStream = context.Response.Body;
            using (var responseBody = new MemoryStream())
            {
                context.Response.Body = responseBody;
                try
                {
                    await _next(context);
                }
                catch (Exception e)
                {
                    var tmpResponse = FormatResponse(context.Response);
                    logger.Error(e, tmpResponse);
                    await responseBody.CopyToAsync(originalBodyStream);
                    return;
                }

                var response = FormatResponse(context.Response);
                logger.Info(response);
                await responseBody.CopyToAsync(originalBodyStream);
            }
        }