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

.NET 5 Web API非调试模式大文件上传失败:远程主机强制关闭连接

解决.NET 5 Web API大文件上传在dotnet run下的问题

针对你遇到的调试模式正常、dotnet run启动时无法上传大文件的问题,核心原因是Kestrel服务器的默认配置限制,以下是具体解决方案:

1. 显式配置Kestrel的请求体大小与超时

在Program.cs(.NET 5顶级语句模式)或Startup.cs中,通过UseKestrel直接调整服务器限制:

// Program.cs 示例
var builder = WebApplication.CreateBuilder(args);

// 配置Kestrel参数
builder.WebHost.ConfigureKestrel(options =>
{
    // 设置请求体大小无限制(也可指定具体值,如6L * 1024 * 1024 * 1024表示6GB)
    options.Limits.MaxRequestBodySize = null;
    // 延长连接超时,适配大文件上传时长
    options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30);
});

// 其他服务配置...

var app = builder.Build();

// 启用全局请求大小限制中间件
app.UseRequestSizeLimit(int.MaxValue);

// 其他中间件配置...

app.Run();

2. 在配置文件中固化Kestrel配置

在appsettings.json或appsettings.Development.json中添加Kestrel全局配置,确保dotnet run启动时加载正确参数:

{
  "Kestrel": {
    "Limits": {
      "MaxRequestBodySize": null,
      "KeepAliveTimeout": "00:30:00"
    }
  }
}

3. 调整客户端HttpClient的超时设置

客户端上传大文件时,需匹配服务端超时配置,避免客户端先断开连接:

// 客户端上传示例
using var httpClient = new HttpClient();
// 设置足够长的超时时间,如30分钟
httpClient.Timeout = TimeSpan.FromMinutes(30);

// 执行文件上传逻辑...

4. 检查Action级别的请求限制

如果你的API中使用了[RequestSizeLimit]特性,确保其值设置合理:

// 在Controller或Action上设置特性
[RequestSizeLimit(6L * 1024 * 1024 * 1024)] // 允许6GB文件上传
public IActionResult Upload(IFormFile file)
{
    // 文件处理逻辑
}

关键说明

Visual Studio调试模式默认使用IIS Express或内置调试服务器,其配置继承了项目调试设置,无严格请求大小限制;而dotnet run直接启动Kestrel,会加载默认配置或你指定的配置文件,错误中的连接强制关闭正是因为默认限制触发了服务端主动断连。

内容的提问来源于stack exchange,提问作者Shangwu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:50:28