WebApi рассматривает целочисленные значения в JSON как true - PullRequest
0 голосов
/ 15 мая 2019

У меня есть ядро ​​.net WebApi и сваггер для тестирования API. Теперь моя проблема заключается в том, что когда я задаю числа для логического поля в моих данных JSON для запроса POST, в моем методе контроллера он обрабатывается как True, чего я не хочу

Вот моя модель:

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

А вот так я вижу значения в контроллере

{
    field1: true
    field2: true
}

Здесь я не хочу, чтобы целое число 2 для поля 1 обрабатывалось как true, и вместо этого запрос должен был завершиться неудачей

Любые рекомендации или предложения будут оценены.

1 Ответ

0 голосов
/ 18 мая 2019

Если вы хотите, чтобы запрос потерпел неудачу, вам нужно создать собственный метод 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
        }
    }
}

Теперь, в методе действия, вы должны проверить на 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 не имеет допустимый тип .......

Надеюсь, это поможет.

...