将复杂的 JSON 发布到 ASP.NET Core 控制器
Posted
技术标签:
【中文标题】将复杂的 JSON 发布到 ASP.NET Core 控制器【英文标题】:POSTing complex JSON to ASP.NET Core Controller 【发布时间】:2016-11-06 13:28:31 【问题描述】:我的 ASP.NET Core 代码中有以下模型:
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
。
最快的方法是什么?
【问题讨论】:
url: '@Url.Action("Create" ,"Test")',
。你确定这行得通吗?
是的,网址没问题
【参考方案1】:
在您的控制器上包含 [ValidateAntiForgeryToken] 会导致问题。您需要在发布数据时包含令牌。 MVC 自动将它包含在表单中,这就是 submitForm() 工作的原因。
挑战在于我不知道如何使它与发布的 JSON 数据一起工作。您可以通过将以下内容添加到 testItem 中:
__RequestVerificationToken: $('input[name="__RequestVerificationToken"]', form).val()
欲了解更多信息,请查看include antiforgerytoken in ajax post ASP.NET MVC
【讨论】:
以上是关于将复杂的 JSON 发布到 ASP.NET Core 控制器的主要内容,如果未能解决你的问题,请参考以下文章