Почему FromBody заполняет значение по умолчанию, а DeserializeObject выдает ошибку, когда передается нулевое значение (для не обнуляемого типа данных)? - PullRequest
0 голосов
/ 27 апреля 2018

Я создаю POST API в .NET. У меня следующий класс.

public class Item
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

Ниже приведен метод контроллера.

1-й подход: -

public IHttpActionResult Post([FromBody]Item item)
{
    // some code

    return Ok();
}

2-й подход: -

public IHttpActionResult Post()
{
    Item item = null;
    var reqContent = Request.Content.ReadAsStringAsync().Result;
    if (reqContent != null)
    {
        item = JsonConvert.DeserializeObject<Item>(reqContent);
    }

    // some code

    return Ok();
}

Проблема заключается в том, что когда я отправляю age='' или age=null в запросе, при первом подходе требуется item.Age=0, но при втором подходе выдается исключение Error converting value {null} to type 'System.Int32'.

Почему это происходит, я не могу понять.

Я предполагаю, что в FromBody обработка нулевого значения для такого типа диалога является дескриптором, но в JsonConvert.DeserializeObject она не обрабатывается.

Это правильно? Или есть какая-то другая причина для верхнего поведения.

...