将复杂的JSON POST到ASP.NET Core控制器
将复杂的JSON POST到ASP.NET Core控制器
我在我的ASP.NET Core代码中有以下模型:
public class TestItem { public string Id { get; set; } public string Name { get; set; } public ListSubItems { get; set; } } public class TestSubItem { public string Id { get; set; } }
以及在我的Controllers/TestController.cs中有以下方法:
// POST: Test/Create [HttpPost] [ValidateAntiForgeryToken] public IActionResult Create([FromBody]TestItem item) { // 在这里使用item... return View(item); }
我在页面中有以下JavaScript代码:
var mySubItems = [{"Id": "1"}]; function submitForm() { // myForm包含一个Id文本框和一个Name文本框 $("#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; //在这里进行调试 } }); };
当我使用`doPost`时,我总是从服务器端收到`400 Bad Request`的响应。而另一方面,`submitForm`工作正常,但我不知道如何将`mySubItems`包含在发送到服务器的数据中。
有什么最快的解决办法吗?
问题原因:在控制器上包含[ValidateAntiForgeryToken]导致了问题的发生。在提交数据时需要包含令牌,MVC会自动在表单中包含该令牌,这就是为什么submitForm()函数可以正常工作的原因。
解决方法:问题在于我不知道如何在提交JSON数据时使其正常工作。你可以通过在testItem中添加以下内容来尝试解决:
__RequestVerificationToken: $('input[name="__RequestVerificationToken"]', form).val()