我正在开发一个支持OpenApi的.NET Core6中的最小API.
我有一个如下定义的解析模型:
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; }
}
然后,我有一个如下所示的POST端点定义:
app.MapPut("/resolutions", (Resolution res) =>
{
//Some logic here
return Results.Ok(new { Message = "Resource updated successfully" });
})
.Produces(200)
.Produces(404)
.WithName("PutResolution");
case 1.我发送了一个PUT请求(超出范围值FORW):
"resolution": {
"w": 1024,
"h": 400
}
结果:200例正常.
case 2:我发送了一个PUT请求(w的数据类型错误):
"resolution": {
"w": "xl",
"h": 400
}
结果:400个JsonException
发行:
- 依赖于反序列化的JsonException.优选地,应该向消费者返回模式验证错误.
问题:
- 在这种情况下处理验证的最佳实践是什么?
- 有没有办法根据OpenApi协定验证传入的请求,在本例中,该协定是动态生成的?在这种情况下,数据类型错误和值超出范围的问题都将在进入路由处理程序之前进行验证.