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

