Javascript 型号为isn&x27;将JSON发送到MVC控制器时的t绑定

Javascript 型号为isn&x27;将JSON发送到MVC控制器时的t绑定,javascript,c#,json,asp.net-mvc,.net-core,Javascript,C#,Json,Asp.net Mvc,.net Core,我可能忽略了一些东西,但我的JSON负载根本没有为我的控制器绑定。我曾尝试制作一个包含聊天列表的类,但这对我也不起作用。我尝试过使用数组名,但似乎也不起作用 控制器: [HttpPost] public IActionResult UpdateChatRequest(IList<Models.UpdateChatRequestModel> request) { var model = new Models.ChatModel(); return Json(model

我可能忽略了一些东西,但我的JSON负载根本没有为我的控制器绑定。我曾尝试制作一个包含
聊天列表的类,但这对我也不起作用。我尝试过使用数组名,但似乎也不起作用

控制器:

[HttpPost]
public IActionResult UpdateChatRequest(IList<Models.UpdateChatRequestModel> request)
{
    var model = new Models.ChatModel();

    return Json(model);
}
public class UpdateChatRequestModel
{
    public int UserID
    {
        get; set;
    }

    public int LastID
    {
        get; set;
    }
}
class Chat {
    constructor(UserID, LastID) {
        this.UserID = UserID;
        this.LastID = LastID;
    }
}
var chats = [new Chat(0, 1), new Chat(1, 4)];

function RequestChatUpdate() {
    $.ajax({
        type: "POST",
        url: '/Chat/UpdateChatRequest',
        data: JSON.stringify(chats),
        contentType: "application/json",
        success: function (data) {
            alert("got response from chat update");
        }
    });
}
JavaScript:

[HttpPost]
public IActionResult UpdateChatRequest(IList<Models.UpdateChatRequestModel> request)
{
    var model = new Models.ChatModel();

    return Json(model);
}
public class UpdateChatRequestModel
{
    public int UserID
    {
        get; set;
    }

    public int LastID
    {
        get; set;
    }
}
class Chat {
    constructor(UserID, LastID) {
        this.UserID = UserID;
        this.LastID = LastID;
    }
}
var chats = [new Chat(0, 1), new Chat(1, 4)];

function RequestChatUpdate() {
    $.ajax({
        type: "POST",
        url: '/Chat/UpdateChatRequest',
        data: JSON.stringify(chats),
        contentType: "application/json",
        success: function (data) {
            alert("got response from chat update");
        }
    });
}
正在从
RequestChatUpdate()发送JSON


您需要为JSON添加名称,如下所示

var request = JSON.stringify({ 'request': chats });
那么您的ajax请求将成为

function RequestChatUpdate() {
    $.ajax({
        type: "POST",
        url: '/Chat/UpdateChatRequest',
        data: request,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (data) {
            alert("got response from chat update");
        }
    });
}
已更新

根据说明书,上面说

为了在ASP.NET核心中正确绑定JSON,必须修改 您的操作将在参数上包含属性[FromBody]。这 告诉框架使用请求的内容类型标头 决定将哪个配置的IIInputFormatter用于模型 装订


这就是为什么你需要添加
[FromBody]

我找到了答案

模型参数前面必须有
[FromBody]
,如下所示:

[HttpPost]
public IActionResult UpdateChatRequest([FromBody] IList<Models.UpdateChatRequestModel> request)
{
    var d = ModelState;
    var model = new Models.ChatModel();

    return Json(model);
}
[HttpPost]
公共IActionResult UpdateChatRequest([FromBody]IList请求)
{
var d=模型状态;
var model=新模型。ChatModel();
返回Json(模型);
}

您是否尝试更改动作中参数的类型-控制器?从
IList请求)
Models.updateCatRequestModel[]request
请尝试发送
var request=JSON.stringify({'request':[{“UserID”:0,“LastID”:1},{“UserID”:1,“LastID”:4})
仍然没有结果请添加
数据类型:'JSON',
让我们看看。您需要添加我建议的内容吗?不,显然,出于某种奇怪的原因,新的框架更新需要[FromBody]属性。