我正在尝试通过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发布请求代码的调试片段
我无法找到引起问题的原因。
答案 0 :(得分:2)
从客户端代码发送的是一组项目,但是在服务器端操作方法中,您的操作方法参数是PostStatus
类的单个对象。提交表单后,默认的模型绑定器将读取并解析所提交的表单数据,并尝试将其映射到您的参数对象属性值。由于您的参数类型和发布的数据是不同的类型,因此模型绑定器无法正确映射值。
您应该使用集合类型作为参数,并且模型绑定程序将能够将发布的表单数据绑定到该集合类型。还可以使用FromBody
属性修饰您的action方法参数,该参数告诉模型绑定程序从请求主体读取数据。
[HttpPost]
public ActionResult postMessage([FromBody] IEnumerable<PostStatus> model)
{
return Json(new { data = model });
}