.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
相关产品推荐
相关产品推荐

