当枚举值不解析时如何将枚举视为字符串绑定失败

维克多

在我们的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章