ASP.NET Core API中第三方JSON接口消费实现方法咨询
需求背景
基于ASP.NET Core开发的自有API服务需要集成第三方数据入库能力:第三方API接收携带Name、address、phone三个字段的JSON格式POST请求,完成第三方侧的数据存储。当前需要在现有自有API的代码逻辑中,实现符合格式要求的第三方请求发送能力,目前缺少对应实现方案。
现有业务代码
Controller层接口实现
[HttpPost] public async Task<IActionResult> InsertUpdate(Devloperr model) { try { var result = await repo.InsertUpdate(model); if (result > 0) { return Ok("Data has been saved"); } return Ok("Data not saved"); } catch (Exception e) { return StatusCode(500, e.Message); } }
Repository层数据入库实现
public async Task<int> InsertUpdate(Devloperr model) { mySqlConnection.Open(); var cmd = mySqlConnection.CreateCommand(); cmd.CommandText = @"SELECT `ID` FROM `Table1` WHERE `ID` =@ID"; var data = await mySqlConnection.QueryAsync<Devloperr>(cmd.CommandText, param: new { ID = model.ID } ); if (data.Count() == 1) { cmd.CommandText = @"UPDATE `Table1` SET `ID` = @ID, `NAMA` = @NAMA, `USERNAME` = @USERNAME WHERE `ID`=@ID ;"; parameters.AddDynamicParams(model); var result = await mySqlConnection.ExecuteAsync(cmd.CommandText, parameters, commandType: sql); return result; } else { cmd.CommandText = @"INSERT INTO `Table1`(`ID`,`NAMA`,`USERNAME`) VALUES (@ID, @NAMA, @USERNAME);"; parameters.AddDynamicParams(model); var result = await mySqlConnection.ExecuteAsync(cmd.CommandText, parameters, commandType: sql); return result; } }
可落地实现建议
- 依赖与配置准备
- 将第三方API的请求地址、接口超时时间、鉴权密钥等可变配置项存入
appsettings.json,按开发、测试、生产环境做差异化配置,禁止硬编码在业务代码中。 - 在服务启动时注册带重试、熔断策略的
IHttpClientFactory,替代手动实例化HttpClient的方式,避免高频请求下的socket连接耗尽问题。
- 将第三方API的请求地址、接口超时时间、鉴权密钥等可变配置项存入
- 模型映射准备
- 新建与第三方API字段严格对齐的请求模型类,属性名必须与第三方要求的
Name、address、phone完全匹配,避免序列化时因字段大小写、命名规则不匹配导致参数丢失。 - 基于现有
Devloperr模型完成字段映射:比如现有模型的NAMA字段映射为第三方要求的Name,现有模型中存储地址、联系电话的字段分别映射为address、phone,若现有模型缺少对应字段需先补全入参校验逻辑,避免漏传必填参数。
- 新建与第三方API字段严格对齐的请求模型类,属性名必须与第三方要求的
- 调用逻辑嵌入
- 明确调用时机:必须在自有数据库完成入库、事务提交成功之后再触发第三方调用,禁止在数据库事务未提交阶段发起外部请求,避免出现本地回滚但第三方已入库的跨服务数据不一致问题。
- 抽离独立的第三方调用服务,不要将HTTP请求逻辑直接硬写到Repository的SQL执行流程中,降低代码耦合度,方便后续单元测试与逻辑迭代。调用时通过
IHttpClientFactory创建客户端,将构造好的请求对象序列化为JSON,设置正确的Content-Type: application/json请求头,发送POST请求即可。
- 容错逻辑补全
- 对第三方调用过程中的网络异常、超时、非2xx响应码做捕获,不要将第三方服务的异常直接透传到前端,也不要因第三方服务不可用阻断自有主流程的入库能力。
- 第三方调用失败的场景要记录详细日志(包含请求参数、第三方返回的错误信息),必要时对接消息队列做异步重试,保证数据最终同步。
内容的提问来源于stack exchange,提问作者Haminteu
相关产品推荐
相关产品推荐

