【发布时间】:2019-01-15 16:21:43
【问题描述】:
当 JSON 请求没有为枚举属性提供正确的值时,是否可以返回 [Required] 属性错误消息?
例如,我有一个 POST 消息模型,其中包含一个枚举类型的 AddressType 属性:
public class AddressPostViewModel
{
[JsonProperty("addressType")]
[Required(ErrorMessage = "Address type is required.")]
public AddressType AddressType { get; set; }
}
AddressType 枚举接受两个值:
[JsonConverter(typeof(StringEnumConverter))]
public enum AddressType
{
[EnumMember(Value = "Dropship")]
Dropship,
[EnumMember(Value = "Shipping")]
Shipping
}
我注意到(或者实际上我的 QA 团队注意到)如果请求消息 JSON 包含空字符串或 AddressType 的 null,则错误消息不是预期的 Address type is required. 消息。相反,错误消息是一个有点不友好的解析错误。
例如,如果请求 JSON 如下所示:
{ "addressType": "" }
那么验证框架自动生成的错误是这样的:
{
"message": "Validation Failed",
"errors": [
{
"property": "addressType",
"message": "Error converting value \"\" to type 'MyNamespace.AddressType'. Path 'addressType', line 4, position 19."
}
]
}
如果有人没有包含有效的枚举值,是否有办法确保返回 [Required] 属性的错误消息?
【问题讨论】:
-
我想说验证工作正常。枚举是基本数字类型之上的一组名称。它们不可为空,因此除非设置,否则它们的值是其基本类型的默认值(即 0)。空字符串不是有效的枚举名称。
null也无效,正是因为枚举不可为空。 -
如果你想“接受”缺失值,类型必须可以为空,即
AddressType?。 -
@PanagiotisKanavos 我同意你的观点,验证工作正常,这不是我想要的。我不希望接受 null 或空字符串,我只想在客户端发送其中任何一个值时呈现用户友好的消息。
-
您也可以使用 FluentValidation 之类的验证包来处理这种特定情况或所有验证。
标签: c# enums asp.net-core-webapi