You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 API大文件上传报413错误求助

解决.NET 8 API大文件上传413(Request Entity Too Large)错误

核心原因

413错误源于请求体大小超过了.NET 8 API、Web服务器(Kestrel)或反向代理(IIS/Nginx)的默认限制。.NET默认请求体大小限制通常在30MB左右,这就是30MB文件能成功上传而89MB失败的直接原因。

解决方案步骤

1. 配置.NET API的请求大小限制

在appsettings.json中添加全局请求限制配置:

{
  "Kestrel": {
    "Limits": {
      "MaxRequestBodySize": 104857600, // 100MB,可根据实际需求调整
      "MultipartBodyLengthLimit": 104857600
    }
  },
  "AllowedHosts": "*"
}

同时在Program.cs中配置MVC控制器的请求参数:

builder.Services.AddControllers(options =>
{
    // 设置全局请求体最大容量
    options.MaxRequestBodySize = 104857600; // 100MB
    // 设置multipart/form-data类型请求的最大长度
    options.MultipartBodyLengthLimit = 104857600;
});

2. 显式配置Kestrel服务器限制(可选但推荐)

若appsettings.json配置未生效,可在Program.cs中直接指定Kestrel参数:

builder.WebHost.ConfigureKestrel(serverOptions =>
{
    serverOptions.Limits.MaxRequestBodySize = 104857600; // 100MB
});

3. QA环境反向代理适配

如果QA环境使用了IIS或Nginx等反向代理,必须同步调整它们的请求大小限制:

IIS配置

在项目根目录添加web.config文件,设置maxAllowedContentLength:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 100MB对应的字节数 -->
        <requestLimits maxAllowedContentLength="104857600" />
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>
Nginx配置

在Nginx的服务器或location块中添加:

client_max_body_size 100M;

4. 控制器级别的精细化限制(可选)

如果仅需针对特定接口调整限制,可使用RequestSizeLimit特性:

[HttpPost]
[Route("MediaUpload")]
[RequestSizeLimit(104857600)] // 100MB
public async Task<IActionResult> MediaUpload([FromQuery] string sessionId, [FromQuery] string pid, [FromForm] ImportMediaUploadModel formData)
{
    // ... 原有业务代码
}

额外代码优化建议

你的UploadFile方法使用了async void,这在异步编程中属于不良实践(会导致异常无法捕获、任务状态无法跟踪等问题),建议修改为async Task:

private async Task UploadFile(IFormFile file)
{
    var thisFileName = file.FileName.Trim('"');
    string? localPath = config[key: "ImportImageFolderPath"];
    string fullPath = Path.Combine(localPath, thisFileName);
    FileInfo fileInfo = new(fullPath);

    using var stream = System.IO.File.Create(fullPath);
    await file.CopyToAsync(stream);
}

调用处同步修改为:

for (var i = 0; i < formData.Files?.Count; i++)
{
    await UploadFile(formData.Files[i]);
}

内容的提问来源于stack exchange,提问作者bob.mazzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:27:09