You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET上传大量文件时FromForm参数为null的问题及解决

问题原因与解决方案

你遇到的问题是触发了ASP.NET Core的表单键值对数量限制:默认配置下,框架对表单中的键值对总数(ValueCountLimit)和多部分请求的头部数量(MultipartHeadersCountLimit)有默认限制(通常为1000)。当上传2000个文件时,每个文件会在multipart表单中生成多个键值对(比如文件本身、文件名、内容类型等),总数量超过默认限制,导致模型绑定失败,最终files参数变为null。

解决方法

方法1:控制器特性局部配置

直接在控制器方法的RequestFormLimits特性中补充配置相关限制参数,设置足够大的数值以容纳2000个文件的需求:

[RequestSizeLimit(100_000_000_000)]
[RequestFormLimits(
    MultipartBodyLengthLimit = long.MaxValue, 
    ValueLengthLimit = int.MaxValue,
    ValueCountLimit = 10000, // 根据实际文件数量调整,确保覆盖需求
    MultipartHeadersCountLimit = 10000
)]
[HttpPost("api/files")]
[Authorize(Policy = Perm.FileCreate)]
public async Task<IActionResult> CreateAsync([FromForm] CreateFileDto files)
{
    // 业务逻辑代码
}

方法2:全局配置

如果多个接口都有大量文件上传需求,可以在全局配置FormOptions,避免重复设置:

在Program.cs中添加以下配置:

builder.Services.Configure<FormOptions>(options =>
{
    // 调整键值对总数限制
    options.ValueCountLimit = 10000;
    // 调整多部分请求头部数量限制
    options.MultipartHeadersCountLimit = 10000;
    // 其他已有的全局限制配置
    options.MultipartBodyLengthLimit = long.MaxValue;
    options.ValueLengthLimit = int.MaxValue;
});

注意事项

  • 配置的数值需根据实际业务需求调整,避免设置过大带来潜在的安全风险(比如恶意请求攻击)。
  • 确保RequestSizeLimit的数值足够覆盖所有上传文件的总大小,避免触发请求大小限制。

内容的提问来源于stack exchange,提问作者Tor Hovland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 18:22:34