.NET5 React应用发布后向API控制器注入DbContext返回index.html问题
问题原因及排查方案
接口返回HTML而非正常响应的原因
生产环境你配置了全局异常跳转规则:
else { app.UseExceptionHandler("/Error"); }
/Error是前端React的路由地址,服务端触发异常后会自动跳转到该地址,返回前端的index.html文件,所以接口请求最终拿到的是HTML内容。
仅生产环境触发MediatR构造Handler失败的原因
这个报错是依赖链底层故障引发的上层误导性提示,并非你没有正确注册MediatR的Handler:
- MediatR的
IRequestHandler实现类依赖DataContext,而DataContext初始化时需要先建立数据库连接 - 本地环境数据库连接正常,整个依赖注入链路可以正常完成,因此接口运行无异常
- 生产环境Google Cloud SQL连接超时,导致
DataContext注入失败,进而引发Handler构造失败,MediatR就抛出了Handler未注册的错误提示
Google Cloud SQL连接超时排查要点
- 确认生产环境读取的连接字符串配置正确,没有硬编码本地数据库的地址、账号、密码等信息
- 检查Google Cloud SQL实例的公网访问配置,将生产服务器的出口IP添加到Cloud SQL的授权访问IP白名单中
- 检查生产服务器的出站防火墙规则,确认放开了3306端口的访问权限
- 如果采用VPC内网连接方式,确认生产服务器和Cloud SQL实例在同一可用区的同一个VPC网络下,内网地址配置无误
内容的提问来源于stack exchange,提问作者Robert Balassan
相关产品推荐
相关产品推荐

