当参数未反序列化时,有什么方法可以警告或抛出错误吗?
Is there any way to warn or throw an error when parameters aren't deserialized?
这是我上周遇到的情况:
我将 JSON 个对象数组发送到 WebAPI 方法,其签名如下:
void Post(IEnumerable<ItemViewModel> items)
JSON 数组的示例可能如下所示(为简洁起见,我删除了大部分属性):
[{ size: 1 },
{ size: 1.5 },
{ size: 2 },
{ size: 3 },
{ size: 1.25 }]
视图模型类似于以下内容(为简洁起见删除了大部分属性):
public class ItemViewModel
{
public int Size { get; set; }
}
问题是 ItemViewModel 的大小 属性 是 "int" 类型,而某些 JSON 对象的大小属性是 "double".
类型
WebAPI 没有将这些对象视为与 ItemViewModel 类型匹配的对象,但它默默地失败了,并且仍然反序列化集合中的其他对象,只是忽略了那些不完全匹配的对象。
是否有任何 setting/configuration 要点或其他方式让 WebAPI 在发生这种情况时抛出异常或记录警告?
有几种方法可以做到。
首先,最简单的方法是用 [Required]
属性装饰您的模型,然后调用 ModelState.IsValid
。如果某些东西没有正确反序列化,它会告诉你。
如果你不喜欢疯狂地用属性装饰你所有的 类(我讨厌它),我听说 Fluent Validation 的好处。
这是我上周遇到的情况:
我将 JSON 个对象数组发送到 WebAPI 方法,其签名如下:
void Post(IEnumerable<ItemViewModel> items)
JSON 数组的示例可能如下所示(为简洁起见,我删除了大部分属性):
[{ size: 1 },
{ size: 1.5 },
{ size: 2 },
{ size: 3 },
{ size: 1.25 }]
视图模型类似于以下内容(为简洁起见删除了大部分属性):
public class ItemViewModel
{
public int Size { get; set; }
}
问题是 ItemViewModel 的大小 属性 是 "int" 类型,而某些 JSON 对象的大小属性是 "double".
类型WebAPI 没有将这些对象视为与 ItemViewModel 类型匹配的对象,但它默默地失败了,并且仍然反序列化集合中的其他对象,只是忽略了那些不完全匹配的对象。
是否有任何 setting/configuration 要点或其他方式让 WebAPI 在发生这种情况时抛出异常或记录警告?
有几种方法可以做到。
首先,最简单的方法是用 [Required]
属性装饰您的模型,然后调用 ModelState.IsValid
。如果某些东西没有正确反序列化,它会告诉你。
如果你不喜欢疯狂地用属性装饰你所有的 类(我讨厌它),我听说 Fluent Validation 的好处。