ControllerBase.Problem should also set the StatusCode of the response (#14672)
* ControllerBase.Problem should also set the StatusCode of the response Fixes https://github.com/aspnet/AspNetCore/issues/14663
This commit is contained in:
parent
c3ccf5ba7f
commit
d0de73684d
|
|
@ -1870,7 +1870,10 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
detail: detail,
|
||||
instance: instance);
|
||||
|
||||
return new ObjectResult(problemDetails);
|
||||
return new ObjectResult(problemDetails)
|
||||
{
|
||||
StatusCode = problemDetails.Status
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -1946,7 +1949,10 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
return new BadRequestObjectResult(validationProblem);
|
||||
}
|
||||
|
||||
return new ObjectResult(validationProblem);
|
||||
return new ObjectResult(validationProblem)
|
||||
{
|
||||
StatusCode = validationProblem.Status
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -2316,6 +2316,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
// Assert
|
||||
var badRequestResult = Assert.IsType<BadRequestObjectResult>(actionResult);
|
||||
var problemDetails = Assert.IsType<ValidationProblemDetails>(badRequestResult.Value);
|
||||
Assert.Equal(400, badRequestResult.StatusCode);
|
||||
Assert.Equal(400, problemDetails.Status);
|
||||
Assert.Equal("One or more validation errors occurred.", problemDetails.Title);
|
||||
Assert.Equal("https://tools.ietf.org/html/rfc7231#section-6.5.1", problemDetails.Type);
|
||||
|
|
@ -2348,6 +2349,48 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
Assert.Equal(detail, problemDetails.Detail);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValidationProblemDetails_UsesSpecifiedStatusCode()
|
||||
{
|
||||
// Arrange
|
||||
var options = GetApiBehaviorOptions();
|
||||
|
||||
var controller = new TestableController
|
||||
{
|
||||
ProblemDetailsFactory = new DefaultProblemDetailsFactory(Options.Create(options)),
|
||||
};
|
||||
|
||||
// Act
|
||||
var actionResult = controller.ValidationProblem(statusCode: 405);
|
||||
|
||||
// Assert
|
||||
var objectResult = Assert.IsType<ObjectResult>(actionResult);
|
||||
var problemDetails = Assert.IsType<ValidationProblemDetails>(objectResult.Value);
|
||||
Assert.Equal(405, objectResult.StatusCode);
|
||||
Assert.Equal(405, problemDetails.Status);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValidationProblemDetails_StatusCode400_ReturnsBadRequestObjectResultFor2xCompatibility()
|
||||
{
|
||||
// Arrange
|
||||
var options = GetApiBehaviorOptions();
|
||||
|
||||
var controller = new TestableController
|
||||
{
|
||||
ProblemDetailsFactory = new DefaultProblemDetailsFactory(Options.Create(options)),
|
||||
};
|
||||
|
||||
// Act
|
||||
var actionResult = controller.ValidationProblem(statusCode: 400);
|
||||
|
||||
// Assert
|
||||
var badRequestResult = Assert.IsType<BadRequestObjectResult>(actionResult);
|
||||
var problemDetails = Assert.IsType<ValidationProblemDetails>(badRequestResult.Value);
|
||||
Assert.Equal(400, badRequestResult.StatusCode);
|
||||
Assert.Equal(400, problemDetails.Status);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ProblemDetails_Works()
|
||||
{
|
||||
|
|
@ -2371,6 +2414,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
// Assert
|
||||
var badRequestResult = Assert.IsType<ObjectResult>(actionResult);
|
||||
var problemDetails = Assert.IsType<ProblemDetails>(badRequestResult.Value);
|
||||
Assert.Equal(500, actionResult.StatusCode);
|
||||
Assert.Equal(500, problemDetails.Status);
|
||||
Assert.Equal("An error occured while processing your request.", problemDetails.Title);
|
||||
Assert.Equal("https://tools.ietf.org/html/rfc7231#section-6.6.1", problemDetails.Type);
|
||||
|
|
@ -2396,6 +2440,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
// Assert
|
||||
var badRequestResult = Assert.IsType<ObjectResult>(actionResult);
|
||||
var problemDetails = Assert.IsType<ProblemDetails>(badRequestResult.Value);
|
||||
Assert.Equal(500, actionResult.StatusCode);
|
||||
Assert.Equal(500, problemDetails.Status);
|
||||
Assert.Equal(title, problemDetails.Title);
|
||||
Assert.Equal("https://tools.ietf.org/html/rfc7231#section-6.6.1", problemDetails.Type);
|
||||
|
|
@ -2419,6 +2464,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
// Assert
|
||||
var badRequestResult = Assert.IsType<ObjectResult>(actionResult);
|
||||
var problemDetails = Assert.IsType<ProblemDetails>(badRequestResult.Value);
|
||||
Assert.Equal(422, actionResult.StatusCode);
|
||||
Assert.Equal(422, problemDetails.Status);
|
||||
Assert.Equal("Unprocessable entity.", problemDetails.Title);
|
||||
Assert.Equal("https://tools.ietf.org/html/rfc4918#section-11.2", problemDetails.Type);
|
||||
|
|
|
|||
Loading…
Reference in New Issue