.NET Core 2(IIS Express)如何解决大文件上传大小限制问题?
解决.NET Core 2 + IIS Express大文件上传404.13错误的步骤
我之前也碰到过一模一样的问题——光加控制器特性确实不够,因为这个错误是两层限制共同作用的结果:ASP.NET Core框架的请求大小限制,加上IIS Express自身的请求过滤限制。得从这几个层面一起调整才行:
1. 修改IIS Express的核心配置文件applicationhost.config
这个文件是IIS Express的规则源头,优先改项目专属的版本(只影响当前项目):
- 找到项目根目录下的隐藏文件夹
.vs\[你的项目名]\config\applicationhost.config - 如果找不到,也可以改全局配置:
C:\Users\[你的用户名]\Documents\IISExpress\config\applicationhost.config
打开文件后,找到对应你项目的<location>节点(通过site name匹配),在<system.webServer> -> <security> -> <requestFiltering>里添加/修改maxAllowedContentLength(单位是字节,100MB对应104857600):
<location path="你的项目站点名称"> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="104857600" /> <!-- 设置为你需要的最大字节数 --> </requestFiltering> </security> </system.webServer> </location>
如果没有<requestFiltering>节点,直接创建即可。
2. 补全ASP.NET Core的全局请求大小配置
控制器特性有时候会被全局配置覆盖,建议在Startup.cs的ConfigureServices方法里专门针对文件上传的multipart请求做配置:
public void ConfigureServices(IServiceCollection services) { // 其他原有配置... // 配置表单请求的最大长度,适配文件上传的multipart类型 services.Configure<FormOptions>(options => { // 这里的数值要大于等于你期望的文件大小(比如100MB) options.MultipartBodyLengthLimit = 104857600; // 可选:如果有大文本字段,同步调整这个值 options.ValueLengthLimit = 104857600; }); services.AddMvc(); }
3. 确认控制器特性的正确使用
你之前加的特性可以保留,但要确保作用范围正确:
[DisableRequestSizeLimit]:如果用在控制器上,会禁用整个控制器的请求大小限制,建议和全局配置搭配使用[RequestSizeLimit(100_000_000)]:直接在上传方法上设置时,要注意数值是字节数(100_000_000约等于95MB,足够覆盖50MB以上的文件)
4. 可选:补充项目web.config配置
如果你的项目中有web.config文件(部署到IIS时自动生成),可以在<system.webServer>节点下添加请求过滤配置作为双重保障:
<system.webServer> <!-- 其他原有配置... --> <security> <requestFiltering> <requestLimits maxAllowedContentLength="104857600" /> </requestFiltering> </security> </system.webServer>
最后记得完全重启IIS Express(关闭后重新启动项目),再测试上传50MB以上的文件就应该能成功了。
内容的提问来源于stack exchange,提问作者yozawiratama
相关产品推荐
相关产品推荐

