将复杂的JSON POST到ASP.NET Core控制器

34 浏览
0 Comments

将复杂的JSON POST到ASP.NET Core控制器

我在我的ASP.NET Core代码中有以下模型:

public class TestItem
{
    public string Id { get; set; }
    public string Name { get; set; }
    public List 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)
{
    // 在这里使用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`包含在发送到服务器的数据中。

有什么最快的解决办法吗?

0
0 Comments

问题原因:在控制器上包含[ValidateAntiForgeryToken]导致了问题的发生。在提交数据时需要包含令牌,MVC会自动在表单中包含该令牌,这就是为什么submitForm()函数可以正常工作的原因。

解决方法:问题在于我不知道如何在提交JSON数据时使其正常工作。你可以通过在testItem中添加以下内容来尝试解决:

__RequestVerificationToken: $('input[name="__RequestVerificationToken"]', form).val()

更多信息,请访问include antiforgerytoken in ajax post ASP.NET MVC

0