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

ASP.NET Core 2.2 API提交超大数据列表遇404错误求助

解决ASP.NET Core 2.2 API提交10-20万条数据时的404错误

你遇到的404错误大概率不是真的“接口未找到”,而是大请求触发了超时、长度限制或者其他服务器端的配置限制,导致请求被提前终止,返回了误导性的404状态码。下面是针对你的场景的具体解决方案:

1. 调整Kestrel服务器的超时与请求大小限制

ASP.NET Core 2.2默认使用Kestrel作为服务器,它有默认的超时和请求大小限制,大请求传输时间超过阈值就会被断开。你可以在Startup.cs的ConfigureServices中添加Kestrel的配置:

services.Configure<KestrelServerOptions>(options =>
{
    // 设置保持连接超时,根据你的数据传输时间调整(比如5分钟)
    options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(5);
    // 设置请求头超时时间
    options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(5);
    // 设置最大请求体大小,和你接口上的[RequestSizeLimit]保持一致或更大
    options.Limits.MaxRequestBodySize = 40 * 1024 * 1024;
});

2. 检查并调整IIS的请求限制(如果部署在IIS上)

如果你的API部署在IIS上,IIS本身的配置会覆盖ASP.NET Core的设置,需要在web.config中添加以下配置:

<system.webServer>
    <security>
        <requestFiltering>
            <!-- 允许的最大请求内容长度,单位为字节,这里设置为100MB(可根据数据大小调整) -->
            <requestLimits maxAllowedContentLength="104857600" />
        </requestFiltering>
    </security>
    <!-- 调整上传预读大小,避免大请求被截断 -->
    <serverRuntime uploadReadAheadSize="104857600" />
    <aspNetCore processPath="dotnet" arguments=".\YourApi.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
    </aspNetCore>
</system.webServer>

另外,在IIS站点的高级设置中,将“连接超时”调整为更长的时间(比如300秒)。

3. 优化JSON序列化配置

大量数据的JSON反序列化可能消耗过多资源或超时,你可以在Startup.cs中优化序列化设置:

services.AddMvc()
    .AddJsonOptions(options =>
    {
        // 忽略空值,减少传输的数据量
        options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
        // 关闭循环引用检测(如果你的DTO没有循环引用)
        options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

4. 考虑分批次提交数据

一次性提交10-20万条数据风险较高,更稳妥的方式是分批次提交:

  • 客户端将数据拆分为多个批次(比如每次1万条),依次调用接口
  • 服务端可以添加批次标识参数,或者直接接收列表,处理完成后返回成功状态,客户端再提交下一批
  • 如果需要原子性,可在服务端实现批次事务,全部完成后再提交数据库

5. 启用详细日志定位问题

404可能是表象,实际是服务器内部发生了异常。你可以在appsettings.json中开启详细日志:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft.AspNetCore": "Debug",
      "Microsoft.AspNetCore.Server.Kestrel": "Debug"
    }
  }
}

查看应用日志或控制台输出,找到请求处理过程中的具体异常信息,这能帮助你定位真正的问题。

内容的提问来源于stack exchange,提问作者Jafrul Sadek Nabil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:24