调用Kiwi API时URL拼接异常求助:endpoint未追加到BaseUrl
问题排查与解决方案
一、URL拼接问题修复
你的BaseUrl是https://api.tequila.kiwi.com/v2(末尾无斜杠),而endpoint是/search(开头带斜杠),很多HTTP客户端在拼接时会忽略BaseUrl的末尾路径,导致生成错误的URL(比如https://api.tequila.kiwi.com/search)。解决方式有两种:
调整BaseUrl和endpoint格式:
- 把BaseUrl改为带末尾斜杠:
"BaseUrl": "https://api.tequila.kiwi.com/v2/" - 同时将endpoint改为
"search"(去掉开头斜杠),这样拼接后会得到正确的https://api.tequila.kiwi.com/v2/search
- 把BaseUrl改为带末尾斜杠:
用Uri类安全拼接:
在你的_httpService.Get方法内部,不要手动拼接字符串,改用Uri类处理:var baseUri = new Uri(_serviceConfig.BaseUrl); var requestUri = new Uri(baseUri, endPoint);这种方式会自动处理斜杠的重复或缺失问题,确保URL格式正确。
二、参数错误导致API返回Null
你的请求参数存在多个格式和命名错误,这会导致Kiwi API无法正确解析请求,进而返回无效响应(被你的ApiResult处理为null):
1. 参数名空格问题
"date_to "(末尾带空格)→ 改为"date_to"" ret_to_Diff_City"(开头带空格)→ 改为"ret_to_Diff_City"(后续还要修正大小写)
2. 参数名大小写不符合API规范
Kiwi API使用蛇形小写命名参数,你的部分参数是驼峰命名,需要修正:
| 错误参数名 | 正确参数名 |
|---|---|
max_Fly_Duration | max_fly_duration |
ret_From_Diff_City | ret_from_diff_city |
ret_to_Diff_City | ret_to_diff_city |
one_For_City | one_for_city |
selected_Cabins | selected_cabins |
mix_With_Cabins | mix_with_cabins |
only_Working_Days | only_working_days |
onlyWeekEnd | only_weekend |
max_Stopovers | max_stopovers |
vehicle_Type | vehicle_type |
3. 修正后的参数示例
parameters: new Dictionary<string, string> { { "fly_from", "FRA"}, { "fly_to", "PRG" }, { "date_from", "05/10/2023" }, { "date_to", "07/10/2023" }, { "return_from", "08/10/2023"}, { "return_to", "10/10/2023" }, { "max_fly_duration", "20" }, { "ret_from_diff_city", "true"}, { "ret_to_diff_city", "true"}, { "one_for_city", "0" }, { "one_per_date", "0"}, { "adults", "2" }, { "children", "2" }, { "selected_cabins", "C" }, { "mix_with_cabins", "M" }, { "adult_hold_bag", "1,0" }, { "adult_hand_bag", "1,1" }, { "child_hold_bag", "2,1" }, { "child_hand_bag", "1,0" }, { "only_working_days", "false" }, { "only_weekend", "false" }, { "partner_market", "us" }, { "max_stopovers", "2" }, { "max_sector_stopovers", "2" }, { "vehicle_type", "aircraft"}, { "limit", "500"}, }
三、调试建议
- 开启
_httpService的日志功能,打印实际发送的完整URL和请求头,对比Kiwi APP生成的URL,确认参数和路径是否一致。 - 检查API响应状态码:如果返回400(参数错误)、401(API Key无效)等错误,说明请求本身有问题,你的
ApiResult可能将错误响应处理为null,需要在代码中捕获并输出响应内容排查。
内容的提问来源于stack exchange,提问作者Umer Iqbal
相关产品推荐
相关产品推荐

