.Net 6 API所有端点报504 Receive Error故障排查求助
检查本地IIS应用池配置
确认该API对应的应用池使用.NET CLR版本 v6.0(不要选“无托管代码”),身份设置为ApplicationPoolIdentity或具备足够权限的账户;同时检查应用池的队列长度和闲置超时参数,避免因请求队列溢出或超时导致请求被丢弃。启用.NET Core详细日志输出
在appsettings.Development.json中修改日志配置,将级别设为Trace以捕获更细粒度的运行信息:{ "Logging": { "LogLevel": { "Default": "Trace", "Microsoft.AspNetCore": "Trace" } } }重启API后查看输出窗口或日志文件,重点关注请求到达后的初始化、路由匹配阶段是否有异常或未完成的操作。
切换到Kestrel托管调试
右键项目→属性→调试,将启动方式改为项目(直接用Kestrel而非IIS),启动后用Postman调用。如果此时请求正常,说明问题出在本地IIS配置或.NET Core模块兼容性上;若仍报错,则聚焦到项目初始化逻辑排查。排查项目启动初始化逻辑
检查Program.cs中的服务注册、中间件配置代码,确认是否存在启动时的阻塞操作(如同步调用远程服务、死循环逻辑)——这类问题会导致Swagger页面能加载,但API无法处理实际请求。可以在关键节点添加Console.WriteLine()输出,验证初始化流程是否完整执行。清理本地项目依赖与缓存
执行以下操作重置本地环境:- 删除项目根目录下的
bin和obj文件夹 - 在项目目录打开PowerShell,运行
dotnet clean和dotnet restore - 清理NuGet缓存:
dotnet nuget locals all --clear
完成后重新生成项目并调试。
- 删除项目根目录下的
排查本地安全软件拦截
暂时关闭本地防火墙、杀毒软件或代理工具,再尝试调用API。部分安全软件可能会放行端口连接,但拦截HTTP请求的内容传输,导致返回0字节响应。对比同事的IIS配置
让同事用appcmd list site /config /xml和appcmd list apppool /config /xml导出其IIS站点与应用池配置,和你的配置对比,重点检查站点绑定、身份验证规则、应用池模块列表等差异。验证本地.NET Runtime版本
运行dotnet --list-runtimes确认本地安装的.NET 6 Runtime版本与同事完全一致,版本差异可能导致隐性兼容性问题,若不一致则安装对应版本的Runtime。
内容的提问来源于stack exchange,提问作者markaaronky

