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

ASP.NET Core MVC上传4GB大文件时控制器文件动作未触发问题

ASP.NET Core MVC 4GB大文件上传调试器不命中控制器的解决办法

核心问题

你现在用的<httpRuntime>是ASP.NET Framework专属的配置项,ASP.NET Core MVC完全不识别这个配置,导致4GB的文件请求在到达控制器之前就被系统拦截,调试器根本没机会命中动作方法。

具体解决步骤

1. 在程序启动时配置全局请求大小限制

在Program.cs中,把请求大小限制的配置放在路由中间件之前:

var builder = WebApplication.CreateBuilder(args);

// 注册服务...

var app = builder.Build();

// 先执行HTTPS重定向等中间件,再添加请求大小限制
app.UseHttpsRedirection();
// 设置最大请求大小为4GB(4*1024*1024*1024字节)
app.UseRequestSizeLimit(4L * 1024 * 1024 * 1024);

app.UseRouting();

// 其他中间件配置...

app.Run();

2. 给特定上传动作单独配置限制

如果只想给某一个上传接口设置大小限制,直接在控制器方法上添加特性:

[HttpPost("upload-large-file")]
// 指定4GB的请求大小上限
[RequestSizeLimit(4L * 1024 * 1024 * 1024)]
public async Task<IActionResult> HandleLargeFile(IFormFile file)
{
    // 你的文件处理逻辑
    return Ok("文件上传成功");
}

如果不需要限制大小(仅针对特殊场景),可以用[DisableRequestSizeLimit]替代上述特性。

3. IIS/IIS Express环境下的额外配置

如果调试或部署用的是IIS/IIS Express,需要修改项目根目录的web.config,添加IIS层面的请求限制:

<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 设置IIS允许的最大请求内容长度为4GB -->
        <requestLimits maxAllowedContentLength="4294967296" />
      </requestFiltering>
    </security>
    <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" hostingModel="inprocess">
      <!-- 延长请求超时时间,避免大文件上传超时 -->
      <limits requestTimeout="00:30:00" />
    </aspNetCore>
  </system.webServer>
</configuration>

4. 调试排查要点

  • 看浏览器网络请求:如果返回413 Payload Too Large,说明还有配置没生效,逐一核对上面的步骤。
  • 确认调试器附加正确:调试时要选中当前运行的ASP.NET Core进程(比如dotnet.exe或iisexpress.exe)。
  • 检查自定义中间件:如果有自己写的请求验证中间件,可能会在到达控制器前拦截大文件请求。

内容的提问来源于stack exchange,提问作者Komal Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:50:21