我的ASP.NET核心代码中有以下模型:
public class TestItem
{
public string Id { get; set; }
public string Name { get; set; }
public List<TestSubItem> SubItems { get; set; }
}
public class TestSubItem
{
public string Id { get; set; }
}
以及我的Controllers / TestController.cs中的以下方法:
// POST: Test/Create
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create([FromBody]TestItem item)
{
// Use item here...
return View(item);
}
我的页面中有以下JavaScript:
var mySubItems = [{"Id": "1"}];
function submitForm() {
// myForm contains an Id textbox and a Name textbox
$("#myForm").submit();
};
function doPost() {
var testItem = {
Id: "2",
Name: "testName",
SubItems: mySubItems
};
$.ajax({
url: '@Url.Action("Create" ,"Test")',
type: "POST",
contentType: "application/json",
data: JSON.stringify(testItem),
success: function (data) {
alert(data);
},
error: function (error) {
var x = error; //break here for debugging.
}
});
};
当我使用doPost
时,我总是从服务器返回400 Bad Request
。另一方面submitForm
工作正常,但我不知道如何在发送到服务器的数据中包含mySubItems
。
最快的出路是什么?
答案 0 :(得分:6)
在控制器上包含[ValidateAntiForgeryToken]会导致问题。发布数据时需要包含令牌。 MVC自动将表单包含在表单中,这就是submitForm()的工作原理。
挑战在于我不知道如何使用JSON数据发布它。您可以将以下内容添加到testItem中:
__RequestVerificationToken: $('input[name="__RequestVerificationToken"]', form).val()