【发布时间】:2017-03-31 03:19:36
【问题描述】:
我们有几个模型通过 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... */
}
}
上面的帖子将返回错误The MyModelId field is required.,这是不准确的。我们想说The id field is required.。我们尝试使用[DataMember(Name="id")],但得到了相同的结果。
问题 1:除了在每个 [Required] 属性上提供我们自己的错误消息之外,我们还有什么方法可以让 ModelState 错误显示 JSON 属性名称而不是 C# 属性名称? p>
-- 更新--
我一直在玩这个,发现了一种“自己动手”的方法,可以使用自定义属性名称重新创建错误消息。我真的希望有一种内置的方法可以做到这一点,但这似乎可以完成这项工作......
https://gist.github.com/Blackbaud-JasonTremper/b64dc6ddb460afa1698daa6d075857e4
问题 2:是否可以假定 ModelState.Key 与 <parameterName>.<reflectedProperty> 语法匹配,或者是否存在不正确的情况?
问题 3:有没有比通过[DataMember] 或[JsonProperty] 属性上的反射进行搜索更简单的方法来确定 JSON 参数名称应该是什么?
【问题讨论】:
标签: c# asp.net-web-api2