【问题标题】:MVC Post Request - Max no. of objects in IEnumerable<T> binding?MVC 发布请求 - 最大数量IEnumerable<T> 绑定中的对象?
【发布时间】: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


【解决方案1】:

我真的需要多开眼界了,不知怎的我在调试时在调用堆栈中错过了这个,在this.Request.Form下:

"Form value count limit 1024 exceeded"

只需在 Action 方法中添加 [RequestFormLimits(ValueCountLimit = xxx)] 注释即可:

[HttpPost]
[RequestFormLimits(ValueCountLimit = 10000)]
public async Task<IActionResult> ProcessF([FromForm] List<FBillingPostDTO> bills)
    {
        return Json("Success");
    }

所以 4 个键值对的 256 个对象 = 1024 个值,这是默认允许的最大值。我需要改进我的谷歌搜索,因为这对我来说是新闻哈哈。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多