将Json API模型的日期属性定义为:
[Required]
[DataType(DataType.Date, ErrorMessage = "Invalid expiry date")]
public DateTime ExpiryDate { get; set; }
在为ExpiryDate发布错误值时,示例:
"ExpiryDate":"2020-02-31T00:00:00",
"ExpiryDate":"2020-01-99T00:00:00",
"ExpiryDate":"abc",
ModelState.Values.Errors [0] .ErrorMessage为空。相反,有一个Model异常,我无法返回API使用者,看起来很难看。
ModelState.Values.Errors[0].Exception = {"Could not convert string to DateTime: 2020-02-31T00:00:00. Path 'CardDetails.ExpiryDate', line 13, position 39."}
我的问题是:如何使数据注释生成错误而不是异常?为什么当前数据注释没有给出错误,这不是[DataType(DataType.Date ...)的工作呢?
答案 0 :(得分:1)
这里的主要问题是JSON中的DateTime值(至少根据JSON解析器)具有特定格式,而不遵循该格式是解析错误,这是当前正在发生的事情。
我认为您必须将值作为字符串,并在其上进行转换和验证。有几种选择。一个是像@erikscandola提到的自定义ValidationAttribute。另一个是在你的模型上使用imp IValidatableObject接口。
您还可以将model属性转换为字符串,只需检查控制器操作:
DateTime expiryDate;
if (!DateTime.TryParse(model.ExpiryDate, out expiryDate))
{
ModelState.AddModelError("", string.Format(
"The given ExpiryDate '{0}' was not valid", model.ExpiryDate));
}
该方法取决于验证逻辑需要多少重用。
答案 1 :(得分:0)
您应该创建自定义数据注释:
public class RequiredDateTimeAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// Here your code to check date in value
}
}