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

配置启动/程序设置的最大内容长度限制无效,无法上传大文件

解决ASP.NET Core大文件上传404.13错误的完整方案

你已经针对Kestrel做了不少配置,但还是踩了一个常见的坑——这个404.13错误本质是IIS的requestFiltering模块先拦截了超大请求,你的Kestrel和应用层配置根本没机会生效。我来帮你补全漏掉的关键步骤:

1. 必须配置web.config(IIS部署必备)

如果你的应用部署在IIS上,不管怎么配置Kestrel,IIS的请求过滤都会先检查请求大小。你需要在项目根目录添加或修改web.config,补上requestLimits配置:

<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 这里设置你允许的最大文件大小,比如1GB = 1073741824字节 -->
        <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
    </security>
    <!-- 可选:如果上传大文件耗时久,延长请求超时时间 -->
    <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" 
                stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
                requestTimeout="00:20:00" />
  </system.webServer>
</configuration>

2. 检查IIS层级的配置限制

有时候站点会继承服务器级的requestFiltering设置,你需要确认:

  • 打开IIS管理器,找到你的站点 → 功能视图 → 选择请求筛选
  • 右键点击→编辑功能设置,查看最大允许内容长度(字节)是否调整到了你需要的值
  • 建议只修改站点级设置,避免影响服务器上的其他应用

3. 优化Action配置(可选但更稳妥)

你已经用了[DisableRequestSizeLimit],不过在.NET Core 3.0+中,更推荐直接指定允许的大小,避免全局无限制带来的风险:

[HttpPost]
[RequestSizeLimit(1073741824)] // 1GB
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(CreateFileViewModel model)
{
    // 你的上传逻辑
}

4. 确认Kestrel配置的灵活姿势

你在Program.cs里的配置是有效的,但用配置文件管理会更灵活。可以在appsettings.json里添加:

"Kestrel": {
  "Limits": {
    "MaxRequestBodySize": 1073741824
  }
}

为什么之前的配置没用?

当请求超过IIS的maxAllowedContentLength时,IIS会直接返回404.13,请求根本不会到达你的ASP.NET Core应用,所以你针对Kestrel和应用层的配置都不会生效。必须先让IIS允许这个大小的请求通过,后续的配置才会起作用。

最后测试的时候,建议用Postman或者curl工具直接测试上传,避免浏览器缓存的旧设置影响结果。

内容的提问来源于stack exchange,提问作者Frantisek Pastorek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:41:46