【发布时间】:2022-05-12 20:31:48
【问题描述】:
在我们的 ASP.net Core Web API 应用程序中,我正在寻找一种方法来捕获绑定错误,当我的控制器方法接受具有 ENUM 属性的复杂对象时,当 ENUM 被反序列化为字符串时。
例如。
class Person
{
public string Name {get; set;}
public SexEnum Sex {get; set;}
}
enum SexEnum
{
Male,
Female,
Other
}
我们使用系统范围的StringEnumConverter,所以Person 的JSON 序列化实例如下所示:
{
"name": "Ann",
"sex": "female"
}
现在,如果我发布这个 JSON(注意 sex 属性中的错字):
{
"name": "Ann",
"sex": "femal"
}
由于绑定失败,控制器方法接收到的整个对象为 NULL。
我想捕捉那个绑定错误,而不是让管道进入控制器,就好像没有任何问题一样,而是向客户端返回一个 BAD REQUEST,包括哪个属性值绑定失败的详细信息。
我知道我要反序列化的类型,我知道我要反序列化的属性类型,并且我可以看到该值没有解析为类型。所以我认为必须有一种方法可以向客户提供这些细节。我只是不知道在哪里以及如何插入。
我希望解决方案是系统范围的,以便涵盖所有枚举,而不必将属性放在模型的属性或枚举本身上。 (这是因为我们将 API 模型作为 nuget 包分发,不能有任何依赖项。)
【问题讨论】:
标签: asp.net-web-api asp.net-core enums model-binding