我正在使用谷歌地理编码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行。 请帮帮我。
答案 0 :(得分: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服务 因为你的申请已被阻止而被封锁 超过使用限制太久或以其他方式滥用网络 服务。如果您遇到,请与Google Enterprise支持小组联系 这个问题。对所有Web服务的请求都需要URL签名。 如果出现HTTP 403(Forbidden)错误,也会拒绝请求 包括客户端参数但缺少签名参数,或 反之亦然。
答案 1 :(得分: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);
}
}