diff --git a/src/Ocelot/Errors/Middleware/ExceptionHandlerMiddleware.cs b/src/Ocelot/Errors/Middleware/ExceptionHandlerMiddleware.cs index ea5d2c84..dc36fd94 100644 --- a/src/Ocelot/Errors/Middleware/ExceptionHandlerMiddleware.cs +++ b/src/Ocelot/Errors/Middleware/ExceptionHandlerMiddleware.cs @@ -6,6 +6,9 @@ using Ocelot.Logging; namespace Ocelot.Errors.Middleware { + /// + /// Catches all unhandled exceptions thrown by middleware, logs and returns a 500 + /// public class ExceptionHandlerMiddleware { private readonly RequestDelegate _next; diff --git a/src/Ocelot/Responder/Middleware/ResponderMiddleware.cs b/src/Ocelot/Responder/Middleware/ResponderMiddleware.cs index 6bce4ac6..10a10c66 100644 --- a/src/Ocelot/Responder/Middleware/ResponderMiddleware.cs +++ b/src/Ocelot/Responder/Middleware/ResponderMiddleware.cs @@ -1,73 +1,73 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Logging; -using Ocelot.Errors; -using Ocelot.Infrastructure.RequestData; -using Ocelot.Logging; -using Ocelot.Middleware; - -namespace Ocelot.Responder.Middleware -{ - public class ResponderMiddleware : OcelotMiddleware - { - private readonly RequestDelegate _next; - private readonly IHttpResponder _responder; - private readonly IErrorsToHttpStatusCodeMapper _codeMapper; - private readonly IOcelotLogger _logger; - - public ResponderMiddleware(RequestDelegate next, - IHttpResponder responder, - IOcelotLoggerFactory loggerFactory, - IRequestScopedDataRepository requestScopedDataRepository, - IErrorsToHttpStatusCodeMapper codeMapper) - :base(requestScopedDataRepository) - { - _next = next; - _responder = responder; - _codeMapper = codeMapper; - _logger = loggerFactory.CreateLogger(); - - } - - public async Task Invoke(HttpContext context) - { - _logger.LogDebug("started error responder middleware"); - - await _next.Invoke(context); - - _logger.LogDebug("calling next middleware"); - - if (PipelineError) - { - _logger.LogDebug("there is a pipeline error, getting errors"); - - var errors = PipelineErrors; - - _logger.LogDebug("received errors setting error response"); - - SetErrorResponse(context, errors); - } - else - { - _logger.LogDebug("no pipeline error, setting response"); - - await _responder.SetResponseOnHttpContext(context, HttpResponseMessage); - } - } - - private void SetErrorResponse(HttpContext context, List errors) - { - var statusCode = _codeMapper.Map(errors); - - if (!statusCode.IsError) - { - _responder.SetErrorResponseOnContext(context, statusCode.Data); - } - else - { - _responder.SetErrorResponseOnContext(context, 500); - } - } - } +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Ocelot.Errors; +using Ocelot.Infrastructure.RequestData; +using Ocelot.Logging; +using Ocelot.Middleware; + +namespace Ocelot.Responder.Middleware +{ + /// + /// Completes and returns the request and request body, if any pipeline errors occured then sets the appropriate HTTP status code instead. + /// + public class ResponderMiddleware : OcelotMiddleware + { + private readonly RequestDelegate _next; + private readonly IHttpResponder _responder; + private readonly IErrorsToHttpStatusCodeMapper _codeMapper; + private readonly IOcelotLogger _logger; + + public ResponderMiddleware(RequestDelegate next, + IHttpResponder responder, + IOcelotLoggerFactory loggerFactory, + IRequestScopedDataRepository requestScopedDataRepository, + IErrorsToHttpStatusCodeMapper codeMapper) + :base(requestScopedDataRepository) + { + _next = next; + _responder = responder; + _codeMapper = codeMapper; + _logger = loggerFactory.CreateLogger(); + + } + + public async Task Invoke(HttpContext context) + { + _logger.LogDebug($"entered {this.GetType().Name}"); + _logger.LogDebug($"invoking next middleware from {this.GetType().Name}"); + + await _next.Invoke(context); + + _logger.LogDebug($"returned to {this.GetType().Name} after next middleware completed"); + + if (PipelineError) + { + var errors = PipelineErrors; + _logger.LogDebug($"{errors.Count} pipeline errors found in {this.GetType().Name}. Setting error response status code"); + + SetErrorResponse(context, errors); + } + else + { + _logger.LogDebug("no pipeline errors, setting and returning completed response"); + await _responder.SetResponseOnHttpContext(context, HttpResponseMessage); + } + _logger.LogDebug($"completed {this.GetType().Name}"); + } + + private void SetErrorResponse(HttpContext context, List errors) + { + var statusCode = _codeMapper.Map(errors); + + if (!statusCode.IsError) + { + _responder.SetErrorResponseOnContext(context, statusCode.Data); + } + else + { + _responder.SetErrorResponseOnContext(context, 500); + } + } + } } \ No newline at end of file