Ошибка привязки модели, когда POST-метод называется Web API - PullRequest
0 голосов
/ 27 февраля 2019

Я пришел сюда, чтобы прочесть много сообщений о той же ошибке, что и сейчас.

У меня есть WEB API, который работает в GET, но не в POST.Когда я отправляю ему JSON с POSTMAN, в ModelState появляется сообщение об ошибке ModelError ModelBinding

Это мой класс модели:

[DataContract]
public class Employee
{
        [DataMember]
        public int ID { get; set; }
        [DataMember(IsRequired = true)]
        public string FirstName { get; set; }
        [DataMember(IsRequired = true)]
        public string LastName { get; set; }
}

Вот метод Post контроллера контроллерамой API:

public IHttpActionResult Post([FromBody]Employee emp)
{
            if (!ModelState.IsValid)
                return BadRequest("Invalid data");

            ...
            return Ok();
}

В этом контроллере я передаю свой if, и он возвращает мне «неверные данные»

Я попробовал все, я удалил [DataContract] в моей модели,но ничего не работает.

Вот пример JSON, который я посылаю:

{
    "FirstName" : "John",
    "LastName" : "Malon"
}

My header contains the contentType JSON

Полный код от Почтальона:

POST /api/employees HTTP/1.1
Host: localhost:49463
Content-Type: application/json
cache-control: no-cache
Postman-Token: 5ac38b20-425a-4ac7-995a-323fbd0bb9a5
{
    "FirstName" : "John",
    "LastName" : "Malon",
}------WebKitFormBoundary7MA4YWxkTrZu0gW--

РЕДАКТИРОВАТЬ: Похоже, что объект emp, который я получаю в методе Post, является нулевым, я видел это сообщение: Параметр Post всегда нулевой Но на английскомэто не мой основной язык, и я не могу понять, каково решение с = Я понимаю, что мне нужно поставить = в JSON, который я отправляю, верно?

Заранее спасибо заваша помощь!

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вы определяете класс, который содержит ненулевое int, но вы не предоставляете его в своем теле POST.Эта проверка всегда будет неудачной, если вы не укажете значение для этого свойства.

Если вы хотите, чтобы это было успешно, вы можете либо -

Опция 1 - изменить свою модель, чтобы она принималасьнулевой идентификатор:

public class Employee
{
        public int? ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
}

Вариант 2 - Укажите значение по умолчанию (но действительное!) int в вашем теле POST, которое должно быть заменено вашей базой данных / внутренним кодом один раз как Idбыло сгенерировано:

{
    "ID" : 0,
    "FirstName" : "John",
    "LastName" : "Malon"
}
0 голосов
/ 27 февраля 2019

Убедитесь, что вы отправляете заголовок application/json от почтальона.В противном случае я не вижу проблем с размещенным кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...