You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中Google Routes API突然返回空值的问题求助

Google Routes API返回空对象{}问题排查

此前可正常从Google Routes API获取出行路线的代码,如今运行仅返回空对象{}。已确认API账单余额充足,调整多个字段后问题仍未解决,代码一个月前可正常运行,寻求问题原因。

请求代码

string routesAPIurl = "https://routes.googleapis.com/directions/v2:computeRoutes";
WebRequest request = WebRequest.Create(routesAPIurl);
request.Method = "POST";
//request.Headers["Content-Type"] = "application/json";
request.ContentType = "application/json";
request.Headers["X-Goog-Api-Key"] = "***************************";
request.Headers["X-Goog-FieldMask"] = "routes.legs.steps.transitDetails";

//create transitObject
TransitObject transitO = new TransitObject();
transitO.travelMode = "TRANSIT";
transitO.departureTime = DateTime.Parse("2024-04-17T09:30:00.000Z");
transitO.computeAlternativeRoutes = true;
Origin trnOrigin = new Origin();
trnOrigin.address = "********";
transitO.origin = trnOrigin;
Destination trnDestination = new Destination();
trnDestination.address = "********";
transitO.destination = trnDestination;
TransitPreferences transitPreferences = new TransitPreferences();
transitPreferences.routingPreference = "TRANSIT_ROUTING_PREFERENCE_UNSPECIFIED";
transitPreferences.allowedTravelModes = new string[] { "LIGHT_RAIL", "BUS" }.ToList();
transitO.transitPreferences = transitPreferences;

var data = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(transitO));
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

实体类代码

public class Destination
{
    public string address { get; set; }
}

public class Origin
{
    public string address { get; set; }
}

public class TransitObject
{
    public Origin origin { get; set; }
    public Destination destination { get; set; }
    public string travelMode { get; set; }
    public System.DateTime departureTime { get; set; }
    public bool computeAlternativeRoutes { get; set; }
    public TransitPreferences transitPreferences { get; set; }
}

public class TransitPreferences
{
    public string routingPreference { get; set; }
    public List<string> allowedTravelModes { get; set; }
}

可能的问题原因

  • 字段掩码限制过严:当前设置的routes.legs.steps.transitDetails仅请求中转详情,若路线无符合条件的中转步骤或API返回结构中该路径不存在,就会返回空对象。可先将掩码改为routes获取完整响应,验证是否有数据返回。
  • 日期序列化格式不符:DateTime对象序列化后的格式可能不符合API要求的RFC3339标准。需检查JSON中departureTime的实际值,必要时添加序列化配置强制输出正确格式:
    JsonConvert.SerializeObject(transitO, new JsonSerializerSettings
    {
        DateTimeZoneHandling = DateTimeZoneHandling.Utc,
        DateFormatString = "yyyy-MM-dd'T'HH:mm:ss'Z'"
    })
    
  • API字段或规则变更:Google可能微调了v2版本的请求参数或响应结构,比如allowedTravelModes枚举值、transitPreferences字段要求等,需对照官方文档核对参数正确性。
  • 编码问题:使用Encoding.ASCII可能导致含非ASCII字符的地址编码错误,建议替换为Encoding.UTF8生成请求内容。
  • 地址解析失败:填写的起点/终点地址无法被API正确解析,导致无路线返回。可尝试替换为经纬度(在实体类中添加location字段)验证是否能获取响应。

内容的提问来源于stack exchange,提问作者Ash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:13:29