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

ASP.NET Core大文件单请求上传报InvalidDataException异常如何解决

问题排查与解决方案

核心原因判断

你遇到的System.IO.InvalidDataException异常本质不是请求大小超限问题:请求大小超限会返回413(Payload Too Large)状态码,而非500错误。该异常通常出现在 multipart 表单数据解析失败的场景,结合你到30%进度才报错的特征,按以下步骤排查即可:


具体修复步骤

  1. 调整Controller端点的配置优先级
    端点特性的优先级高于全局配置,你当前端点设置的RequestSizeLimit为1GB,虽然理论上覆盖543MB的上传需求,但如果上传文件夹包含大量小文件,表单边界、文件头的额外开销可能超出预期阈值,直接替换为无限制特性测试:
[HttpPost]
[DisableRequestSizeLimit] // 替换原有的RequestSizeLimit特性
[RequestFormLimits(MultipartBodyLengthLimit = 2147483648)] // 和全局配置对齐设为2GB
public async Task<ActionResult> PostAsync(){
    await Request.ReadFormAsync();
    System.Diagnostics.Debug.WriteLine(Request.Form.Files.Count);
    return Ok("Files uploaded.");
}
  1. 修正IIS Express全局配置
    IIS Express的全局applicationhost.config配置会覆盖项目web.config的设置,多数场景下仅修改项目web.config不生效:
  • 打开项目目录下的.vs\{你的项目名}\config\applicationhost.config文件
  • 找到system.webServer/security/requestFiltering/requestLimits节点,修改maxAllowedContentLength为2147483648
  1. 关闭请求体缓冲(大文件上传推荐配置)
    默认的请求体缓冲会把整个上传内容写入临时目录,大文件场景下容易触发IO异常,在端点上加[DisableRequestBuffering]特性,配合流式读取避免缓冲:
[HttpPost]
[DisableRequestSizeLimit]
[DisableRequestBuffering]
[RequestFormLimits(MultipartBodyLengthLimit = 2147483648)]
public async Task<ActionResult> PostAsync(){
    // 后续性能优化可替换ReadFormAsync为直接读取Request.Body流解析,降低内存占用
    await Request.ReadFormAsync();
    System.Diagnostics.Debug.WriteLine(Request.Form.Files.Count);
    return Ok("Files uploaded.");
}
  1. 校验前端构造逻辑
    确认前端构造FormData时没有重复追加边界标识,请求头Content-Type是浏览器自动生成的带boundary参数的内容,不要手动设置Content-Type头。

验证步骤

按上述配置修改后,先测试上传1GB以内的单文件确认配置生效,再测试文件夹上传即可。

内容的提问来源于stack exchange,提问作者Dewan Arun Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:36:04