public async Task Invoke(HttpContext context)
 {
     try
     {
         await _next(context);
     }
     catch (Exception e) when(StatusCodeFromExceptionBuilder.BadRequestExceptions(e))
     {
         context.Response.StatusCode  = (int)StatusCodeFromExceptionBuilder.GetHttpStatusCodeFromException(e);
         context.Response.ContentType = "text/plain";
         await context.Response.WriteAsync(e.Message);
     }
 }
        public void OnActionExecuted(ActionExecutedContext context)
        {
            var result = context.Result as ObjectResult;

            var responseInfo = new ResponseInfo
            {
                TraceIdentifier = context.HttpContext.TraceIdentifier,
                Path            = context.HttpContext.Request.Path,
                Headers         = context.HttpContext.Response.Headers,
                Result          = result?.Value
            };

            if (context.Exception != null)
            {
                responseInfo.StatusCode =
                    (int)StatusCodeFromExceptionBuilder.GetHttpStatusCodeFromException(context.Exception);
            }
            else
            {
                if (result?.StatusCode != null)
                {
                    responseInfo.StatusCode = (int)result.StatusCode;
                }
            }

            responseInfo.ExceptionMessage = context.Exception?.ToString();

            var responseLogMessage = _requestResponseLoggingBuilder.GenerateResponseLogMessage(responseInfo);

            if (responseInfo.IsServerErrorStatusCode)
            {
                _logger.LogError(responseLogMessage);
            }
            else
            {
                _logger.LogInformation(responseLogMessage);
            }
        }