private async Task LogWithContent(HttpContext context, string requestId)
        {
            // Replace Request Body with own MemoryStream
            var originalRequestBody = context.Request.Body;
            var requestBodyStream   = new MemoryStream();
            await context.Request.Body.CopyToAsync(requestBodyStream);

            requestBodyStream.Seek(0, SeekOrigin.Begin);
            _logger.LogTrace(RequestLoggerHelper.Format(context.Request, requestId, requestBodyStream, siteConfig.BaseUrlPrefix));
            requestBodyStream.Seek(0, SeekOrigin.Begin);

            context.Request.Body = requestBodyStream;

            // Replace Response Body with own MemoryStream
            var bodyStream         = context.Response.Body;
            var responseBodyStream = new MemoryStream();

            context.Response.Body = responseBodyStream;

            // Call next Middleware
            await next(context);

            context.Request.Body = originalRequestBody;

            responseBodyStream.Seek(0, SeekOrigin.Begin);
            _logger.LogTrace(RequestLoggerHelper.Format(context.Response, requestId, responseBodyStream));
            responseBodyStream.Seek(0, SeekOrigin.Begin);

            await responseBodyStream.CopyToAsync(bodyStream);
        }
Esempio n. 2
0
        public void OnException(ExceptionContext context)
        {
            var message = "Internal Server Error";

            if (context.Exception is Common.Exceptions.SlambyException)
            {
                message = context.Exception.Message;
            }

            var response = ErrorsModel.Create(message);

            context.Result = new ObjectResult(response)
            {
                StatusCode   = 500,
                DeclaredType = typeof(ErrorsModel)
            };

            logger.LogError(new EventId(0), context.Exception, "GlobalExceptionFilter");

            //log the request for this error if it had
            // Replace Request Body with own MemoryStream
            var originalRequestBody = context.HttpContext.Request.Body;
            var requestBodyStream   = new MemoryStream();

            context.HttpContext.Request.Body.CopyTo(requestBodyStream);

            requestBodyStream.Seek(0, SeekOrigin.Begin);

            logger.LogInformation(RequestLoggerHelper.Format(context.HttpContext.Request, "GlobalExceptionFilter", requestBodyStream, siteConfig.BaseUrlPrefix));
            requestBodyStream.Seek(0, SeekOrigin.Begin);

            context.HttpContext.Request.Body = requestBodyStream;

            context.Exception = null; // mark exception as handled
        }
        private async Task LogWithoutContent(HttpContext context, string requestId)
        {
            _logger.LogTrace(RequestLoggerHelper.Format(context.Request, requestId, null, siteConfig.BaseUrlPrefix));

            // Call next Middleware
            await next(context);

            _logger.LogTrace(RequestLoggerHelper.Format(context.Response, requestId, null));
        }