如何在ajax发布请求asp.net核心MVC剃须刀中发送对象数组

时间:2018-10-29 02:48:44

标签: jquery asp.net-web-api razor asp.net-core asp.net-core-mvc

我正在尝试通过ActionResult方法将对象数组发送到Web Api

我的对象数组如下

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; }
    }

在控制器中发布请求代码

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

上面的Web api发布请求代码的调试片段

enter image description here

我无法找到引起问题的原因。

1 个答案:

答案 0 :(得分:2)

从客户端代码发送的是一组项目,但是在服务器端操作方法中,您的操作方法参数是PostStatus类的单个对象。提交表单后,默认的模型绑定器将读取并解析所提交的表单数据,并尝试将其映射到您的参数对象属性值。由于您的参数类型和发布的数据是不同的类型,因此模型绑定器无法正确映射值。

您应该使用集合类型作为参数,并且模型绑定程序将能够将发布的表单数据绑定到该集合类型。还可以使用FromBody属性修饰您的action方法参数,该参数告诉模型绑定程序从请求主体读取数据。

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