有人可以告诉我为数字数据类型(即int,long等)传递WebApi输入的信息吗?
public class Emp
{
public int Id { get; set; }
public long Volume { get; set; }
}
输入集1:
{
"Id" : "1",
"Volume" : "200"
}
这没有模型验证错误。
输入集2:
{
"Id" : "1.2",
"Volume" : "200.5"
}
模型验证由于无法转换值而失败。
错误:{"Error converting value \"200.5\" to type 'System.Int64'. Path 'Volume', line 2, position 14."}
输入集3:
{
"Id" : 1.2,
"Volume" : 200.5
}
它不会产生任何模型验证失败,但是映射到C#对象的值是Id = 1,体积= 200。
但是在这里,我要传递十进制输入时也要模型验证错误。应该只允许整数。
那么发送api输入的正确模式是什么?
将小数点值传递给int和long数据类型时,获得模型验证错误的正确方法是什么。
Using int & long will make those values rounded to nearest integer value
如何覆盖此错误以给出模型验证错误?
答案 0 :(得分:0)
您可以在属性上使用JsonConverter属性为其定义一个自定义json转换器。
public class Emp
{
[JsonConverter(typeof(MyCustomIntConverter))
public int Id { get; set; }
public long Volume { get; set; }
}
public class MyCustomIntConverter : JsonConverter<int>
{
//implement here
}
答案 1 :(得分:0)
有一种方法可以存档您想要的内容,但这不是一个简单的方法。
@Saif的答案指向正确的方法。
必须更改模型以避免不必要的框架行为并获取原始值,例如,将类型更改为double或string。
然后,您必须在方法中为自己验证参数。如果某些参数不正确,则必须创建模型验证错误。
在mvc核心中,您可以创建这样的模型验证错误(在mvc中应该类似):
ModelState.AddModelError(nameof(emp.Volume), $"Error converting value {emp.Volume} to long");