.net 6 Ajax POST 大数组导致空参数

问题描述 投票:0回答:2

我构建了一个 .net 6 MVC 应用程序,它需要处理以字符串表的形式从 UI 传递的一些数据(实际上是 JSON 对象,但我尝试尽可能简化以缩小范围)。

这是我的控制器方法:

[HttpPost]
public JsonResult LoadData( List<string> inputData)
{
    var success = db.ProcessData(inputData);

    return Json(new
    {
        Success = success
    });

}

这是我的 Javascript 调用:

var inputData = [];

$.each(tableData.body, function (index, item) {
    inputData.push(JSON.stringify(jQuery.parseJSON(item[0])));
});

var data = {
    inputData: inputData
}

$.ajax({
    type: "POST",
    url: '@Url.Action("LoadData", "myController")',
    data: data,
    success: function(response) {
                                
    },
    failure: function(response) {
        debugger;
    },
    error: function(response) {
        debugger;
    }
});

发生的情况是,只要我的数组不太大,一切都可以正常工作(我已经尝试过一些条目并且它可以工作),但是当我尝试使用真实数据时(内容长度是 226601,所以不是那么令人印象深刻) ),我的控制器中的 inputData 为空。 没有异常,只是数据被清空了。

我在VS2022中用IISExpress调试的时候遇到了这个问题。 我尝试通过在项目的根目录添加 web.config 文件来设置一些内容大小限制,并且我还尝试在 Program.cs 中设置 MaxRequestBodySize,但到目前为止没有任何效果。

有人熟悉这个吗?

编辑: 我只是尝试在传递数组之前对其进行 JSON.Stringify,并将参数类型更改为字符串而不是列表。然后我可以使用 JArray.Parse(inputData) 将其解析为数组,并且所有数据似乎都在那里。您可以发布的数组的大小有限制吗?

ajax asp.net-mvc
2个回答
0
投票

您应该尝试将数据作为一个原始对象获取

[HttpPost]
public JsonResult LoadData( JArray inputData)
{
var data=inputData.ToObject<List<string>>();
}

或者如果可能的话,您可以序列化数组两次并将其作为字符串发送

[HttpPost]
public JsonResult LoadData( string inputData)
{
   var json = JsonConvert.DeserializeObject<string>(inputData);
}

另一种方法是搜索 SO 并找到如何将数组大小从 1024 增加到更多。


0
投票

Dotnet core 对于表单数组中的项目数默认限制为 1024。 这可以在 Program.cs 文件中设置:

builder.Services.Configure<FormOptions>(options =>
{
    options.ValueCountLimit = 16384;// Default is 1024
});
© www.soinside.com 2019 - 2024. All rights reserved.