在我们的ASP.net Core Web API应用程序中,当控制器方法接受将ENUMs反序列化为字符串的ENUM属性的复杂对象时,我正在寻找一种捕获绑定错误的方法。
例如。
class Person
{
public string Name {get; set;}
public SexEnum Sex {get; set;}
}
enum SexEnum
{
Male,
Female
}
我们使用整个系统,StringEnumConverter
因此JSON序列化实例Person
如下所示:
{
"name": "Ann",
"sex": "female"
}
现在,如果我发布此JSON(请注意sex
属性中的拼写错误):
{
"name": "Ann",
"sex": "femal"
}
由于绑定失败,控制器方法接收到的整个对象为NULL。
我想捕获该绑定错误,而不是让管道像没有发生任何错误一样进入控制器,而是向客户端返回一个BAD REQUEST,其中包括未能绑定哪个属性值的详细信息。
我知道我要反序列化的类型,我知道我要反序列化的属性类型,我可以看到该值未解析为该类型。因此,我认为必须有一种方法可以将详细信息提供给客户。我只是不知道在哪里以及如何插入它。
我希望该解决方案在整个系统范围内,以便涵盖所有枚举,而不必将属性放在模型的属性或枚举本身上。(这是因为我们将API模型作为nuget包分发,该包不能有任何依赖关系。)
遵循上面的Simply Ged的答案AFAICS,由于吞没了模型绑定异常,因此实际上无法做到这一点(https://github.com/aspnet/Mvc/issues/3898)
ModelState
包含模型绑定错误,您可以从中获取一些信息。由于我们目前仅使用JSON序列化,因此我最终实现了一个过滤器来检查的ModelState
错误JsonSerializationException
。虽然不是完美的,例如。为了获得请求的值(绑定失败),JsonSerializationException
您需要解析内部异常消息。
如果有人找到更好的解决方案,我将很高兴听到。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句