diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ObjectResult.cs b/src/Microsoft.AspNetCore.Mvc.Core/ObjectResult.cs index ded227d22a..8e850a363c 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ObjectResult.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ObjectResult.cs @@ -50,6 +50,11 @@ public virtual void OnFormatting(ActionContext context) if (StatusCode.HasValue) { context.HttpContext.Response.StatusCode = StatusCode.Value; + + if (Value is ProblemDetails details && !details.Status.HasValue) + { + details.Status = StatusCode.Value; + } } } } diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ObjectResultTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ObjectResultTests.cs index 2c0e9ab003..7b818ad97b 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ObjectResultTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ObjectResultTests.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.AspNetCore.Mvc.Infrastructure; +using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; @@ -61,6 +62,38 @@ public async Task ObjectResult_ExecuteResultAsync_SetsStatusCode() Assert.Equal(404, actionContext.HttpContext.Response.StatusCode); } + [Fact] + public async Task ObjectResult_ExecuteResultAsync_SetsProblemDetailsStatus() + { + // Arrange + var modelState = new ModelStateDictionary(); + + var details = new ValidationProblemDetails(modelState); + + var result = new ObjectResult(details) + { + StatusCode = StatusCodes.Status422UnprocessableEntity, + Formatters = new FormatterCollection() + { + new NoOpOutputFormatter(), + }, + }; + + var actionContext = new ActionContext() + { + HttpContext = new DefaultHttpContext() + { + RequestServices = CreateServices(), + } + }; + + // Act + await result.ExecuteResultAsync(actionContext); + + // Assert + Assert.Equal(StatusCodes.Status422UnprocessableEntity, details.Status.Value); + } + private static IServiceProvider CreateServices() { var services = new ServiceCollection();