.NET Core 的webapi项目,设置上传附件过大问题

发布于:2025-06-28 ⋅ 阅读:(15) ⋅ 点赞:(0)

‌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)]