1、服务器层配置 (Kestrel)
适用于自托管 Kestrel 场景,需在 Program.cs
中设置:
builder.WebHost.ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = 524288000; // 500 MB
});
2、中间件层配置 (FormOptions
)
针对表单请求(含文件上传),在 Program.cs
或 Startup.ConfigureServices
中配置:
builder.Services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 1048576000; // 1 GB
});
3、IIS/IIS Express 配置
若部署于 IIS,需修改发布后的 web.config
文件:
<system.webServer>
<security>
<requestFiltering>
<!-- 单位:字节 (1 GB = 1073741824) -->
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
4、控制器/动作方法层配置
单个接口可独立设置上限
[HttpPost]
[RequestSizeLimit(209715200)] // 200 MB
public IActionResult Upload(IFormFile file) { ... }
5、通过 appsettings.json
配置
支持动态读取配置文件:
{
"Kestrel": { "Limits": { "MaxRequestBodySize": 524288000 } },
"FormOptions": { "MultipartBodyLengthLimit": 1048576000 }
}
- 层级优先级:控制器级 > 中间件级 > 服务器级 > IIS 配置。
- 环境差异:IIS 部署必须同时设置
web.config
和代码层(如 Kestrel 或FormOptions
)45。 - 默认值对比:
- Kestrel:128 MB (
MultipartBodyLengthLimit
) 1 - IIS:约 28.6 MB (30,000,000 字节)
📌 推荐配置流程
场景 配置位置 示例值(1GB) 来源 Kestrel 独立部署 Program.cs
(Kestrel)MaxRequestBodySize=1073741824
18 IIS 托管 web.config
+ 代码层maxAllowedContentLength="1073741824"
+FormOptions
45 动态配置 appsettings.json
通过 IConfiguration
注入6 单个接口特殊限制 控制器方法添加 [RequestSizeLimit]
[RequestSizeLimit(100000000)]
- Kestrel:128 MB (