diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Infrastructure/ClientErrorResultFilter.cs b/src/Microsoft.AspNetCore.Mvc.Core/Infrastructure/ClientErrorResultFilter.cs index fd5911ea07..1ef66b1a33 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Infrastructure/ClientErrorResultFilter.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Infrastructure/ClientErrorResultFilter.cs @@ -43,6 +43,13 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure return; } + // We do not have an upper bound on the allowed status code. This allows this filter to be used + // for 5xx and later status codes. + if (clientError.StatusCode < 400) + { + return; + } + var result = _clientErrorFactory.GetClientError(context, clientError); if (result == null) { diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Infrastructure/ClientErrorResultFilterTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Infrastructure/ClientErrorResultFilterTest.cs index 83098744ff..0a2c6db76d 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Infrastructure/ClientErrorResultFilterTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Infrastructure/ClientErrorResultFilterTest.cs @@ -68,6 +68,42 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure Assert.Same(Result, context.Result); } + [Theory] + [InlineData(400)] + [InlineData(409)] + [InlineData(503)] + public void OnResultExecuting_Transforms4XXStatusCodeResult(int statusCode) + { + // Arrange + var actionResult = new StatusCodeResult(statusCode); + var context = GetContext(actionResult); + var filter = GetFilter(); + + // Act + filter.OnResultExecuting(context); + + // Assert + Assert.Same(Result, context.Result); + } + + [Theory] + [InlineData(201)] + [InlineData(302)] + [InlineData(399)] + public void OnResultExecuting_DoesNotTransformStatusCodesLessThan400(int statusCode) + { + // Arrange + var actionResult = new StatusCodeResult(statusCode); + var context = GetContext(actionResult); + var filter = GetFilter(); + + // Act + filter.OnResultExecuting(context); + + // Assert + Assert.Same(actionResult, context.Result); + } + private static ClientErrorResultFilter GetFilter() { var factory = Mock.Of(