0

我正在使用谷歌地理编码api从地址获取纬度和经度。但它给出了一个例外

远程服务器返回错误:(403) Forbidden。

代码如下:

WebClient client = new WebClient();
Uri uri = GetGeocodeUri(address);
string[] geocodeInfo = client.DownloadString(uri).Split(',');
return new Coordinate(Convert.ToDecimal(geocodeInfo[2]),convert.ToDecimal(geocodeInfo[3]));

异常来自“downloadstring”时的第 3 行。请帮帮我。

4

2 回答 2

1

这以前是否有效,现在停止工作?GeoCoding 有使用限制,如果您超出这些限制,可以返回 403。

https://developers.google.com/maps/documentation/business/articles/usage_limits

剪掉它:

HTTP 403 响应

对 Web 服务的请求也可能会收到 HTTP 403(禁止)错误。在大多数情况下,这是由于 URL 签名无效。要验证这一点,请删除客户端和签名参数,然后重试:

如果响应是 HTTP 200(OK),那么签名就是问题所在。这与使用限制无关;有关详细信息,请参阅 Maps API for Business 文档的 Web 服务一章中的生成有效签名。如果响应仍然是 HTTP 403 (Forbidden) 错误,则不一定是签名问题,可能与使用限制有关。这通常意味着您对 Web 服务的访问已被阻止,原因是您的应用程序超过使用限制的时间过长或滥用了 Web 服务。如果您遇到此问题,请联系 Google Enterprise 支持。对所有 Web 服务的请求都需要 URL 签名。当包含客户端参数但缺少签名参数时,请求也将被拒绝并出现 HTTP 403(禁止)错误,反之亦然。

于 2013-09-12T08:20:15.790 回答
0
var loc = await GetLocation("central park");

public static async Task<GeoCoordinate> GetLocation(string address)
{
    string url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address=";

    using (WebClient wc = new WebClient())
    {
        wc.Encoding = Encoding.UTF8;
        string json = await  wc.DownloadStringTaskAsync(url + address);
        dynamic result = await JsonConvert.DeserializeObjectAsync(json);
        var loc = result.results[0].geometry.location;
        return new GeoCoordinate((double)loc.lat, (double)loc.lng);
    }
}
于 2013-09-12T09:00:44.193 回答