Other 4xx codes
All HTTP status codes in ASP.NET Core
4xx Client error
The server requires the request to be conditional (RFC 6585), usually to force If-Match on updates and prevent lost updates.
In ASP.NET Core: Return it when a PUT or PATCH arrives without If-Match and your API requires one.
The StatusCodes constant, HttpStatusCode enum name, reason phrase, class, and how EnsureSuccessStatusCode() and the standard resilience handler treat 428.
| Constant | StatusCodes.Status428PreconditionRequired |
|---|---|
| HttpStatusCode | HttpStatusCode.PreconditionRequired |
| Reason phrase | Kestrel sends Precondition Required |
| Class | 4xx, client error |
| IsSuccessStatusCode | false |
| EnsureSuccessStatusCode() | throws HttpRequestException: Response status code does not indicate success: 428 (Precondition Required). |
| Standard resilience handler | does not retry it |
Results.StatusCode(StatusCodes.Status428PreconditionRequired)
Results.Problem(statusCode: StatusCodes.Status428PreconditionRequired, detail: "...")StatusCode(StatusCodes.Status428PreconditionRequired)
Problem(statusCode: StatusCodes.Status428PreconditionRequired, detail: "...")What Results.Problem(statusCode: 428) sends (with AddProblemDetails()), as application/problem+json:
{
"title": "Precondition Required",
"status": 428,
"traceId": "0HNA1B2C3D4E5:00000001"
}A controller's Problem(statusCode: 428) sends a different body, because MVC only fills type and title for codes in ApiBehaviorOptions.ClientErrorMapping:
{
"status": 428,
"traceId": "0HNA1B2C3D4E5:00000001"
}A bare StatusCode(428) in an [ApiController] also gets a ProblemDetails body automatically; Results.StatusCode(428) 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