调用CQC位置变更接口HttpGet路由写法错误返回404,如何修正?
问题诊断
- 参数绑定逻辑错误:目标CQC接口的
page/perPage/startTimestamp/endTimestamp均为查询参数,需要跟在接口路径后以?开头、&分隔,不属于路由路径的一部分。你的代码将参数写进了路由模板,还添加了[FromRoute]注解,最终拼接出的路径不符合接口要求,触发404资源不存在错误。 - 路由模板书写错误:接口固定路径为
changes/location,你额外将参数占位符拼接在路径后,导致实际请求路径与目标接口路径完全不匹配。 - 时间格式不匹配:你请求时传入的是本地化时间格式
9/20/2021 8:57:53 AM,但接口要求使用ISO 8601标准的UTC时间格式(如2021-09-18T02:33:20Z),即使路由正确也会触发参数校验失败。
修正方案
1. 调整控制器接口写法
移除路由中的参数占位符,将参数绑定改为从查询字符串读取:
[HttpGet("changes/location")] public async Task<ChangesDetailsVM> GetChange( [FromQuery] int page, [FromQuery] int perPage, [FromQuery] DateTimeOffset startTimestamp, [FromQuery] DateTimeOffset endTimestamp) { return await _cqcService.GetChange(page, perPage, startTimestamp, endTimestamp); }
2. 调整请求调用格式
Postman请求时按照如下规则拼接地址即可:
[你的服务根地址]/cqc/changes/location?page=1&perPage=1000&startTimestamp=2021-09-20T08:57:53Z&endTimestamp=2021-09-21T08:57:53Z
3. 下层服务调用注意事项
_cqcService中调用第三方CQC接口时,同样需要将参数拼接为查询字符串,不要拼接到路由路径中,可使用QueryHelpers类自动处理参数拼接,避免格式错误。
内容的提问来源于stack exchange,提问作者Irina Sercaianu
相关产品推荐
相关产品推荐

