我想在提交服务器之前强制要求字段。为此,我使用 [必需] 数据注释进行模型验证。它可以按预期用于字符串数据类型,但不能用于 double 。
由于某些原因,它不适用于 double 类型属性。 以下是我对模型:
的代码public class ProductMetadata
{
[Required]
public string Barcode { get; set; }
[StringLength(50)]
[Required(AllowEmptyStrings = false, ErrorMessage="Please insert the product name!")]
public string Name { get; set; }
[Range(0, 5000)]
public double ShippingCostPerUnit { get; set; }
[Range(0, 10000)]
public int QuantityForFreeShipping { get; set; }
public Nullable<int> CategoryId { get; set; }
public bool IsDeleted { get; set; }
[Range(0, 1000000)]
[Required(ErrorMessage="Please provide a unit price for the product!")]
public double UnitPrice { get; set; }
}
响应正文是JSON响应,并且对于所有已完成的必填字段都没有以下内容:
{
"Message":"The request is invalid.",
"ModelState":
{"product":["Required property 'UnitPrice' not found in JSON. Path '', line 1, position 33."],
"product.Barcode":["The Barcode field is required."],
"product.Name":["Please insert the product name!"]
}
}
我不明白为什么名称和条形码正常工作,而 UnitPrice 则不行。
修改1 :
如果我删除了 [必需] 属性,并且我输入了 UnitPrice -1,我会收到相应的验证消息,那么为什么不能为< strong>必需属性?
编辑2 :请求有效内容(还更新了 ProductMetadata 类):
{IsDelete: false, CategoryId: 1}
CategoryId: 1
IsDelete: false
任何帮助表示赞赏!谢谢!
答案 0 :(得分:0)
最快的决定是让单位价格可以为空“
[Range(0, 1000000)]
[Required(ErrorMessage="Please provide a unit price for the product!")]
public double? UnitPrice { get; set; }
问题是json中缺少单位价格字段,JSON格式化程序尝试反序列化double并在执行Required之前收到异常。