Other 4xx codes
All HTTP status codes in ASP.NET Core
4xx Client error
The body is well-formed but semantically invalid (RFC 9110, formerly WebDAV's "Unprocessable Entity").
In ASP.NET Core: Some APIs prefer it to 400 for validation errors. ASP.NET Core uses 400; UnprocessableEntity() returns 422 if you want it.
The StatusCodes constant, HttpStatusCode enum name, reason phrase, class, and how EnsureSuccessStatusCode() and the standard resilience handler treat 422.
| Constant | StatusCodes.Status422UnprocessableEntity |
|---|---|
| HttpStatusCode | HttpStatusCode.UnprocessableEntity, HttpStatusCode.UnprocessableContent (aliases, same value) |
| Reason phrase | Kestrel sends Unprocessable Entity; RFC name: Unprocessable Content |
| Class | 4xx, client error |
| IsSuccessStatusCode | false |
| EnsureSuccessStatusCode() | throws HttpRequestException: Response status code does not indicate success: 422 (Unprocessable Entity). |
| Standard resilience handler | does not retry it |
TypedResults.UnprocessableEntity()
TypedResults.UnprocessableEntity<TValue>(error)
Results.StatusCode(StatusCodes.Status422UnprocessableEntity)
Results.Problem(statusCode: StatusCodes.Status422UnprocessableEntity, detail: "...")UnprocessableEntity()
UnprocessableEntity(error)
StatusCode(StatusCodes.Status422UnprocessableEntity)
Problem(statusCode: StatusCodes.Status422UnprocessableEntity, detail: "...")Checked on Kestrel: Results.UnprocessableEntity() returns 422.
What Results.Problem(statusCode: 422) sends (with AddProblemDetails()), as application/problem+json:
{
"type": "https://tools.ietf.org/html/rfc4918#section-11.2",
"title": "Unprocessable Entity",
"status": 422,
"traceId": "0HNA1B2C3D4E5:00000001"
}A controller's Problem(statusCode: 422) sends the same body.
A bare StatusCode(422) in an [ApiController] also gets a ProblemDetails body automatically; Results.StatusCode(422) in a minimal API sends an empty body unless you add UseStatusCodePages().
Every response on this page was recorded from ASP.NET Core 10.0.12 on Kestrel in the Production environment; the HttpClient rows come from .NET 10.0.12 and Microsoft.Extensions.Http.Resilience 10.10.0.
All HTTP status codes in ASP.NET Core