在我们的ASP.net Core Web API应用程序中,当我的控制器方法接受将ENUMs反序列化为字符串的ENUM属性的复杂对象时,我正在寻找一种捕获绑定错误的方法。
例如。
class Person
{
public string Name {get; set;}
public SexEnum Sex {get; set;}
}
enum SexEnum
{
Male,
Female
}
Run Code Online (Sandbox Code Playgroud)
我们使用整个系统,StringEnumConverter因此JSON序列化实例Person如下所示:
{
"name": "Ann",
"sex": "female"
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我发布此JSON(请注意sex属性中的错字):
{
"name": "Ann",
"sex": "femal"
}
Run Code Online (Sandbox Code Playgroud)
由于绑定失败,控制器方法接收到的整个对象为NULL。
我想捕获该绑定错误,而不是让管道像没有什么错误一样进入控制器,而是向客户端返回一个BAD REQUEST,其中包括未能绑定哪个属性值的详细信息。
我知道我要反序列化的类型,我知道我要反序列化的属性类型,我可以看到该值未解析为该类型。因此,我认为必须有一种方法可以将详细信息提供给客户。我只是不知道在哪里以及如何插入它。
我希望该解决方案在整个系统范围内,以便涵盖所有枚举,而不必将属性放在模型的属性或枚举本身上。(这是因为我们将API模型作为nuget包分发,不能有任何依赖关系。)
我们有一个包含约 150 个控制器(约 500 个方法)的 Web API,我们将其从 Core2.2 升级到 net5.0,并随之升级了 Swashbuckle 包。
旧版本的 Swashbuckle 使用SwaggerResponse属性在 SwaggerUI 上显示信息,我们在大约 500 个方法中大量使用了它。
在某些时候,该SwaggerResponse属性已被弃用,推荐的解决方案是另一种方法:
https: //github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/159
有没有办法
SwaggerResponse最新 Swashbuckle 中的属性,或者