一、描述
项目后端.net6.0(即 ASP.NET Core 6.0 ,托管在 IIS 上),前端VUE+Element Plus。在项目中做的文档管理模块,需要上传文档,用户上传不到50MB文件发现出错,文件上传失败,接口没有响应。还没进到接口就已经出错了,考虑过是前端的限制element不支持或后端代码限制了大文件的传输,发现不是;寻找了网上的解决方案,发现是 IIS 中上传文件大小限制住了。
参考:https://www.cnblogs.com/bribe/p/17898926.html
IIS10默认上传文件大小为28.6MB,若需要上传的文件超过限制则需要手动修改配置。
二、解决方案
1.修改IIS配置
- 选中网站,双击对应的"配置编辑器"

- 在"节(s):"输入system.webServer/security/requestFiltering,找到"requestLimits"中的"maxAllowedContentLength",修改成需要限制的文件大小(此处指的是字节bytes,我这里设置1000000000约等于1G)

2.修改项目中web.config文件(上面的操作也可以通过修改项目中web.config文件来实现)
- 确认后端技术栈:✅如果是 ASP.NET Framework
在 .NET Framework 中,有两个关键限制:
- IIS 的
maxAllowedContentLength - ASP.NET 的
httpRuntime.maxRequestLength(单位:KB!)
XML
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1000000000" />
</requestFiltering>
</security>
</system.webServer>
<!-- 注意maxRequestLength单位是KB;注:.NET Framework 内部限制maxRequestLength 约 2G -->
<!-- 最好增加executionTimeout超时时间 -->
<system.web>
<httpRuntime maxRequestLength="1000000" executionTimeout="3600" shutdownTimeout="900" />
</system.web>
- 确认后端技术栈:✅如果是 ASP.NET Core
ASP.NET Core 不读取 httpRuntime,需在代码中配置:
① IIS 的 **web.config**仍需保留:
XML
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1000000000" />
</requestFiltering>
</security>
</system.webServer>
② 同时,在 **Program.cs**中添加:(如果此处不加默认是128MB)
cs
// 【ASP.NET Core 应用层】在 Program.cs 中提高上传限制
// 增加文件上传大小限制(200MB = 200 * 1024 * 1024 字节)
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 1000000000; // 最大请求体大小1G(MultipartBodyLengthLimit 单位:字节)
options.ValueLengthLimit = 1000000000; // 单个表单项值长度(如 base64)
options.KeyLengthLimit = 1000000000;
});
// 如果你使用的是非表单上传(比如 raw body),还需要配置 Kestrel
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxRequestBodySize = 1_000_000_000; // 1GB
});
✅ 额外建议:延长超时时间
ASP.NET Framework :executionTimeout="3600"(已包含在上面配置中)
ASP.NET Core :Kestrel 默认无超时,但 IIS 作为反向代理有默认超时(2分钟),可通过 web.config 调整:
XML
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
<requestTimeout value="00:20:00" /> <!-- 20分钟 -->
</aspNetCore>
</system.webServer>
三、总结
- 确保 IIS 的
maxAllowedContentLength≥ 文件大小(字节) - 确认后端是 .NET Framework 还是 Core
- 如果是 Framework → 检查
web.config是否包含httpRuntime.maxRequestLength - 如果是 Core → 检查
Program.cs是否设置了FormOptions.MultipartBodyLengthLimit
修改完成后 重新部署并重启 IIS(或应用池)
微软官方文档链接相关配置参考:
请求限制 &;requestLimits> |Microsoft Learn