I'm working on a minimal API in .NET Core 6 with OpenApi support.
I have a Resolution model defined like this:
using System.ComponentModel.DataAnnotations;
public struct Resolution
{
[Required, Range(1, 800)]
public int W { get; set; }
[Required, Range(1, 600)]
public int H { get; set; }
}
Then I have a POST endpoint definition like this:
app.MapPut("/resolutions", (Resolution res) =>
{
//Some logic here
return Results.Ok(new { Message = "Resource updated successfully" });
})
.Produces(200)
.Produces(404)
.WithName("PutResolution");
Case 1. I send a PUT request (out of range value fore w):
"resolution": {
"w": 1024,
"h": 400
}
Result: 200 OK.
Case 2: I send a PUT request (wrong data type for w):
"resolution": {
"w": "xl",
"h": 400
}
Result: 400 JsonException
Issue:
- relying on JsonException on deserialization. Preferably a schema validation error should be returned to consumer.
Questions:
- What is the best practice to handle validation in this case?
- Is there a way to validate incoming request against the OpenApi contract, which in this case, is generated on the fly? In this case both wrong data type and value out of range issues would be validated before entering the route handler.