模型绑定ASP.NET Core中复杂类型的列表

时间:2016-12-15 04:54:09

标签: javascript c# asp.net-core asp.net-core-mvc

我在ASP.NET Core MVC中遇到模型绑定问题。我有这个端点,当从Javascript调用时会被命中,但postData总是为空。

    [HttpPost("/somepost")]
    public string SomePost([FromBody] PostData postData)
    {
        return "Got It!";
    }

    public class PostData
    {
        public int ID { get; set; }
        public string[] ListOrArray { get; set; } // Doesn't matter if this ends up a List or an Array
    }

这个端点正在被$ .click函数命中:

$('img.some-image').click(function () {
    array = ['sample data', 'some more'];

    data = {
        ID: 1,
        ListOrArray: array 
    };

    $.ajax({
        type: 'POST',
        url: '/somepost',
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        data: data,
        success: function (result) {
            console.log('Received: ');
            console.log(result);
        }
    });
});

我猜测问题是模型绑定,但我不确定。我看过使用小写Javascript对象属性名称的示例,但这并没有为我改变任何内容。

我还必须从POST中删除[ValidateAntiForgeryToken],但我希望重新添加它。我猜测我必须将令牌添加到GET请求中,以便我可以将其提交给POST,但我还没弄明白怎么做。我不认为这与我的问题有任何关系。

我已经搜索了答案和例子,但没有一个能为我工作。 ASP.NET Core非常新,因此没有太多内容。我的版本是1.1.0。

1 个答案:

答案 0 :(得分:3)

您已设置contentType:json但是您要发送plain object,但您需要发送json object

要将object转换为json object,您可以使用JSON.stringify

$.ajax({
    type: 'POST',
    url: '/somepost',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(data),
    success: function (result) {
      console.log('Received: ');
      console.log(result);
   }
});