【问题标题】:.Net Core v3.1 POSTing a large JSON object to a Razor Page handler.Net Core v3.1 将大型 JSON 对象发布到 Razor 页面处理程序
【发布时间】:2020-12-27 04:48:25
【问题描述】:

我有以下 JavaScript:

var ids = [
  "ed4bbe0e-d318-e811-a95f-000d3a11f5ee",
  "386c9468-d11b-e811-a95d-000d3a11ec14",
  "2913f317-991d-e811-a95d-000d3a11ec14"
];

$.ajax({
  method: 'POST',
  url: `/Jobs?handler=CreateJobsInQBO`,
  dataType: 'json',
  contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  // contentType: 'application/json',
  data: { jobIds: ids }
})

发布到下面的 Razor 页面处理程序

public async Task<JsonResult> OnPostCreateJobsInQBO(IEnumerable<string> jobIds) {
   Result<List<Job>> result;
   if (jobIds == null || !jobIds.Any()) {
      result = "No jobs were submitted.";
   } else {
      result = await DoStuffAsync(jobIds);
   }

   return new JsonResult(result);
}

这没有问题。 问题是,当我的 JavaScript 数组很大时,大约有 3000 个项目,传入的处理程序参数值会为 null。我尝试将 ajax contentType 设置为 application/json 并在对象发送之前使用 JSON.stringify ,但它们似乎没有区别。我也尝试在处理函数中的参数上设置 [FormBody],但同样不起作用。

我知道我在这里遗漏了一些简单的东西。我只需要一种将字符串数组发布到大约有 5000 个项目的处理程序方法的方法。最好不要使用 application/x-www-form-urlencoded 内容类型,因为我认为这是导致大型数组无法工作的原因。

【问题讨论】:

    标签: javascript ajax asp.net-core razor-pages


    【解决方案1】:

    ValueCountLimit 的默认值为 1024。这是允许的表单条目数的限制。

    如果值计数超过1024,你应该在Startup.cs中增加它

    services.Configure<FormOptions>(options =>
    {
        options.ValueCountLimit = int.MaxValue;
    });
    

    【讨论】:

    • 很高兴知道这一点。不幸的是,我的数组只有大约 122KB,远低于 30MB 的限制。
    • 对不起,我的错误:)。它实际上与ValueCountLimit 选项有关。它的默认限制为 1024。因此您需要将其设置为大于 3000。
    猜你喜欢
    • 2020-04-04
    • 2018-09-05
    • 2020-04-26
    • 2018-05-26
    • 2018-07-30
    • 1970-01-01
    • 2020-08-11
    • 2021-01-26
    • 2013-09-08
    相关资源
    最近更新 更多