我在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。
答案 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);
}
});