Как отправить массив объекта в AJAX Post запроса Asp.net Core Mvc бритвы - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь отправить массив объектов в веб-интерфейс API. Метод ActionResult

мой массив объектов выглядит следующим образом

model:[{"Status":"HOLD","MessageId":1},{"Status":"HOLD","MessageId":2}]

отправка запроса из интерфейса в файле .cshtml

    $.ajax({
        method: 'post',
        url: "Home/postMessage",
        data: JSON.stringify(model),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
           console.log(data)
        }
    });

код веб-API выглядит следующим образом

Модель PostStatus

public class PostStatus
    {
        public string Status { get; set; }

        public int MessageId { get; set; }
    }

post Код запроса в контроллере

[HttpPost]
public ActionResult postMessage(PostStatus model)
{
    return  Json(new { data = model });
}

отладочный фрагмент вышеприведенного кода запроса почтового веб-интерфейса

enter image description here

Я был не в состоянии найти проблему, в которой возникла проблема.

1 Ответ

0 голосов
/ 29 октября 2018

Из вашего клиентского кода вы отправляете массив элементов, но в вашем методе действия на стороне сервера параметр метода действия представляет собой один объект класса PostStatus. Когда форма отправлена, механизм связывания модели по умолчанию прочитает и проанализирует отправленные данные формы и попытается сопоставить их со значениями свойств объекта параметра. Поскольку тип вашего параметра и публикуемые данные - это разные типы, связыватель модели не может правильно отобразить значения.

Вы должны использовать тип коллекции, так как связыватель параметров и моделей сможет привязывать к ним опубликованные данные формы. Также украсьте свой параметр метода действия атрибутом FromBody, который указывает связующему модели читать данные из тела запроса.

[HttpPost]
public ActionResult postMessage([FromBody] IEnumerable<PostStatus> model)
{
    return Json(new { data = model });
}
...