WebApi将JSON中的整数值视为true

时间:2019-05-15 10:53:35

标签: json asp.net-web-api swagger asp.net-core-webapi swagger-ui

我有一个.net核心WebApi,并大摇大摆地测试API。现在的问题是,当我为POST请求的JSON数据中的布尔字段指定数字时,在我的控制器方法中,它被视为True,我不希望

这是我的模特:

{
    public bool Field1 { get; set; }
    public bool Field2 { get; set; }
}
{
    field1: 2
    field2: true
}

这就是我在控制器中看到值的方式

{
    field1: true
    field2: true
}

在这里,我不希望将field1的整数2视为true,而是请求应该失败

任何建议或建议都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

如果您希望请求失败,则将为set属性创建一个自定义boolean方法,并根据观察到的失败引发异常。如下所示:

private bool _field1;
public bool Field1
{ 
    get
    { 
        return _field1; 
    }
    set
    {
        if(value.GetType() == typeof(bool))
        {
            _field1 = value;
        }
        else
        {
            throw new ArgumentException("Value "+value+" is not of valid type.");   // type of exception can be as per the failure observed
        }
    }
}

现在,在action方法中,您应该检查ModelState错误。为此,您可以这样做:

public IHttpActionResult SomeAction([FromBody] RequestModel request)
{
    if(!ModelState.IsValid)
    {
        foreach (var modelState in ModelState.Values)
        {
            foreach (var error in modelState.Errors)
            {
              //collate the errors and send appropriate response back
            }
        }
    }
    else
    {
         // do your usual logic
    }
}

您将以以下格式获取异常:

  

Exception = {System.ArgumentException:值1不是   有效类型.......

希望这会有所帮助。