【发布时间】:2020-10-06 09:58:20
【问题描述】:
我有一个控制器动作如下用于发布表单数据(只是测试绑定 atm,留下的 cmets 让您了解我尝试过的事情):
[HttpPost]
//[RequestFormLimits(BufferBodyLengthLimit = 2097152000)]
//[RequestSizeLimit(209715200)]
public async Task<IActionResult> ProcessF([FromForm] IEnumerable<FBillingPostDTO> bills)
{
return Json("Success");
}
这个 Post Action 是通过 AJAX 调用的:
$.ajax({
url: "@Url.Action("ProcessF","Billing")",
type: "POST",
//contentType: "application/json",
dataType: "json",
data: { "bills": promiseArray }
}).done(function () {
location.href = "/F/Manage/"
})
数据绑定到 IEnumerable,但前提是提交的集合包含 256 个或更少的对象。除此之外,绑定返回 null 和 0 个条目。
我认为这可能是maxAllowedContentLength 问题,但在填充数据后,似乎是提交数组中的对象数导致它返回 null。
在我回到开始并重构它以避免这个限制之前,是否有一个设置控制这个值?长度为 256 的 IEnumerable 似乎有点巧合,尤其是当 ContentLength 不会导致问题时(即接受 256 个元素 @ 36Kb,但超过 256 个元素 @ 35Kb 被拒绝)
应用程序是 .Net Core 3.1 在 IIS express 上本地运行(调试)。
【问题讨论】:
-
哇,这很奇怪。您是在使用新的 JSON 解析器还是将其设置为使用 NewtonsoftJson?
-
使用标准的,我一直试图避免 NewtonSoft,因为 .net 核心包含它自己的。暂时搁置一下,看看这里是否出现了一些东西,否则我想我只需要对数据进行字符串化并在另一边解析它:(当你尝试以“正确”的方式做事时很糟糕它拒绝工作
-
在 fiddler 或请求参数中检查,实际上是从前端传递了超过 256 个吗?
-
检查 webconfig 的 maxRequestLength。这可能是发布请求中的问题。
-
如果集合为 256 或更少,它将绑定。也没有高兴地尝试过 web.config 中的 maxRequestLength。我将尝试一个只有 1 个键值对(目前有 4 个)的测试 DTO,以获得关于 contentLength 与集合大小的确定。给我 10 分钟,我会更新
标签: c# asp.net-mvc asp.net-core