我构建了一个 .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) 将其解析为数组,并且所有数据似乎都在那里。您可以发布的数组的大小有限制吗?
您应该尝试将数据作为一个原始对象获取
[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 增加到更多。
Dotnet core 对于表单数组中的项目数默认限制为 1024。 这可以在 Program.cs 文件中设置:
builder.Services.Configure<FormOptions>(options =>
{
options.ValueCountLimit = 16384;// Default is 1024
});