配置启动/程序设置的最大内容长度限制无效,无法上传大文件
解决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
相关产品推荐
相关产品推荐

