在ModelState.Errors中使用[JsonProperty("name")]

jt0*_*000 11 c# asp.net-web-api2

我们有几个模型通过JsonProperty覆盖名称,但是当我们通过ModelState获得验证错误时会出现问题.例如:

class MyModel
{
    [JsonProperty("id")]
    [Required]
    public string MyModelId {get;set;}
}

class MyModelController
{
    public IHttpActionResult Post([FromBody] MyModel model)
    {
        if (!ModelState.IsValid)
        {
            return HttpBadRequest(ModelState);
        }

        /* etc... */
    }
}
Run Code Online (Sandbox Code Playgroud)

上述帖子将返回The MyModelId field is required.不准确的错误.我们想这样说The id field is required..我们尝试使用[DataMember(Name="id")]但获得了相同的结果.

问题1:除了在每个[Required]属性上提供我们自己的错误消息之外,有没有办法让ModelState错误显示JSON属性名而不是C#属性名?

- 更新 -

我一直在玩这个并找到一个"自己动手"的方法,用于使用自定义属性名称重新创建错误消息.我真的希望有一个内置的方法来做到这一点,但这似乎做了...

https://gist.github.com/Blackbaud-JasonTremper/b64dc6ddb460afa1698daa6d075857e4

问题2:可以假设ModelState.Key与<parameterName>.<reflectedProperty>语法匹配,或者是否存在可能不正确的情况?

问题3:是否有更简单的方法来确定JSON参数名称应该是什么,而不是通过反射[DataMember][JsonProperty]属性进行搜索?

bob*_*bek 3

您尝试过使用DisplayName属性吗?

显示名称属性与显示属性

此外,您还可以将错误消息分配给[Required]属性。

[Required(ErrorMessage = "Name is required")]