diff --git a/src/Ocelot/Responder/ErrorsToHttpStatusCodeMapper.cs b/src/Ocelot/Responder/ErrorsToHttpStatusCodeMapper.cs index abba08b1..5c1e9fd0 100644 --- a/src/Ocelot/Responder/ErrorsToHttpStatusCodeMapper.cs +++ b/src/Ocelot/Responder/ErrorsToHttpStatusCodeMapper.cs @@ -1,17 +1,16 @@ using System.Collections.Generic; using System.Linq; using Ocelot.Errors; -using Ocelot.Responses; namespace Ocelot.Responder { public class ErrorsToHttpStatusCodeMapper : IErrorsToHttpStatusCodeMapper { - public Response Map(List errors) + public int Map(List errors) { if (errors.Any(e => e.Code == OcelotErrorCode.UnauthenticatedError)) { - return new OkResponse(401); + return 401; } if (errors.Any(e => e.Code == OcelotErrorCode.UnauthorizedError @@ -19,20 +18,20 @@ namespace Ocelot.Responder || e.Code == OcelotErrorCode.UserDoesNotHaveClaimError || e.Code == OcelotErrorCode.CannotFindClaimError)) { - return new OkResponse(403); + return 403; } if (errors.Any(e => e.Code == OcelotErrorCode.RequestTimedOutError)) { - return new OkResponse(503); - } - + return 503; + } + if (errors.Any(e => e.Code == OcelotErrorCode.UnableToFindDownstreamRouteError)) { - return new OkResponse(404); + return 404; } - return new OkResponse(404); + return 404; } } } \ No newline at end of file diff --git a/src/Ocelot/Responder/IErrorsToHttpStatusCodeMapper.cs b/src/Ocelot/Responder/IErrorsToHttpStatusCodeMapper.cs index b4b610d9..61330db9 100644 --- a/src/Ocelot/Responder/IErrorsToHttpStatusCodeMapper.cs +++ b/src/Ocelot/Responder/IErrorsToHttpStatusCodeMapper.cs @@ -1,11 +1,13 @@ using System.Collections.Generic; using Ocelot.Errors; -using Ocelot.Responses; namespace Ocelot.Responder -{ +{ + /// + /// Map a list OceoltErrors to a single appropriate HTTP status code + /// public interface IErrorsToHttpStatusCodeMapper { - Response Map(List errors); + int Map(List errors); } } diff --git a/src/Ocelot/Responder/Middleware/ResponderMiddleware.cs b/src/Ocelot/Responder/Middleware/ResponderMiddleware.cs index a15bb68b..f086b566 100644 --- a/src/Ocelot/Responder/Middleware/ResponderMiddleware.cs +++ b/src/Ocelot/Responder/Middleware/ResponderMiddleware.cs @@ -56,18 +56,11 @@ namespace Ocelot.Responder.Middleware _logger.LogTrace($"completed {MiddlwareName}"); } - private void SetErrorResponse(HttpContext context, List errors) - { + 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); - } + _responder.SetErrorResponseOnContext(context, statusCode); } } } \ No newline at end of file diff --git a/test/Ocelot.UnitTests/Responder/ErrorsToHttpStatusCodeMapperTests.cs b/test/Ocelot.UnitTests/Responder/ErrorsToHttpStatusCodeMapperTests.cs index d2ac91e0..3b79715e 100644 --- a/test/Ocelot.UnitTests/Responder/ErrorsToHttpStatusCodeMapperTests.cs +++ b/test/Ocelot.UnitTests/Responder/ErrorsToHttpStatusCodeMapperTests.cs @@ -4,7 +4,6 @@ using Ocelot.Errors; using Ocelot.Middleware; using Ocelot.Requester; using Ocelot.Responder; -using Ocelot.Responses; using Shouldly; using TestStack.BDDfy; using Xunit; @@ -14,7 +13,7 @@ namespace Ocelot.UnitTests.Responder public class ErrorsToHttpStatusCodeMapperTests { private readonly IErrorsToHttpStatusCodeMapper _codeMapper; - private Response _result; + private int _result; private List _errors; public ErrorsToHttpStatusCodeMapperTests() @@ -77,7 +76,7 @@ namespace Ocelot.UnitTests.Responder private void ThenTheResponseIsStatusCodeIs(int expectedCode) { - _result.Data.ShouldBe(expectedCode); + _result.ShouldBe(expectedCode); } } }