2016-12-15 110 views
0

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

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

此端点正在从$。点击功能击中:

$('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。

+0

要添加标记,只包含'__RequestVerificationToken:$( '输入[名称= “__ RequestVerificationToken”]')VAL();'英寸您的数据对象 –

回答

3

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

要转换objectjson 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); 
    } 
}); 
+0

'datatype'与发布的内容无关(指定服务器发回的类型)。我假设你的意思是说你已经设置了'contentType:'json''但是...... _ –

+0

@StephenMuecke是的。 – Mairaj