Связыватель базовой модели Asp.net принимает случайное целое число для логических типов - PullRequest
1 голос
/ 14 мая 2019

Учитывая, что модель имеет логическое свойство:

public class Person
{
    public string Name { get; set; }
    public bool IsMale { get; set; }
}

При попытке отправить следующую полезную нагрузку:

{
    "name": "Bob",
    "isMale": 12345 // any random integer
}

Для простого действия:

[HttpPost]
public IActionResult Post([FromBody] Person person)
{
    if (ModelState.IsValid)
        return Ok();
    return BadRequest(ModelState);
}

Свойство person.IsMale получает значение true.

При прохождении isMale: "foobar" получаю ошибку неверного типа

При прохождении isMale: "0" я получаю ошибку недопустимого типа

При прохождении isMale: "1" я получаю ошибку недопустимого типа

При прохождении isMale: "True" я получаю true

При прохождении isMale: "False" я получаю false

При прохождении isMale: 0 я получаю false

При прохождении isMale: 1 я получаю true

Если передать isMale: 34 (случайное целое число), я получу true

Вопрос:

Почему он считает, что случайное целое число по умолчанию равно true и как изменить это поведение, чтобы пожаловаться на то, что переданный тип не подходит (int вместо bool)?

1 Ответ

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

Судя по вашим примерам, любое числовое значение, отличное от 0, интерпретируется как true, что совсем не странно.

Указанные версии "0" и "1" относятся к типу string и не могут быть напрямую проанализированы для bool.

См. Документацию для bool.Parse(string).

...