将输入传递给数字数据类型的WebAPI的标准方法?

时间:2018-09-04 09:20:18

标签: c# asp.net-mvc model-validation

有人可以告诉我为数字数据类型(即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

如何覆盖此错误以给出模型验证错误?

2 个答案:

答案 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");