我正在尝试在谷歌地图上映射我公司的所有办公室,但在调用API时遇到了一个奇怪的问题。 该代码将返回大约一半的办公地址的NO_RESULTS,但是当我复制使用的确切调用时,它将在我的浏览器中返回结果。 添加组件=国家:美国解决了其中的大部分问题,但仍有相当多的确切问题。
这是一个例子:
https://maps.googleapis.com/maps/api/geocode/json?components=country:US&address=1110%20PELICAN%20BAY%20DRIVE%20%20DAYTONA%20BEACH%20FL%20321191381&key=KEY
1110鹈鹕湾驱动器代托纳比奇
佛罗里达州3211913811110%20鹈鹕%20海湾%20驱动器%20%20代托纳%20海滩%20FL%20321191381
ZERO_RESULTS
它可以在我尝试的任何浏览器中运行,但在由我的 REST 客户端调用时不起作用。 代码如下:
public Geolocation Locate(string address)
{
var client = new RestClient();
client.BaseUrl = new Uri("https://maps.googleapis.com/");
var request = new RestRequest("maps/api/geocode/json?components=country:US&address={address}&key=KEY");
request.AddParameter("address", Uri.EscapeDataString(address), ParameterType.UrlSegment);
var response = client.Execute<Geolocation>(request);
return response.Data;
}
以上是我调用 API 的服务,下面是它的实现方式。
officeObj.Address = office.ADDR1.Trim() + " " +
office.ADDR2.Trim() + " " +
office.CITY.Trim() + " " +
office.STATE.Trim() + " " +
office.ZIP.Trim();
Geolocation geolocation = _geolocationService.Locate(officeObj.Address);
var location = geolocation?.results.FirstOrDefault()?.geometry?.location;
您需要正确使用 RestSharp。这段代码工作得很好。
public static IRestResponse Locate(string address)
{
var client = new RestClient();
client.BaseUrl = new Uri("https://maps.googleapis.com/");
client.AddDefaultParameter("key", ApiKey, ParameterType.QueryString);
var request = new RestRequest("maps/api/geocode/json?components=country:US");
request.AddQueryParameter("address", address);
return client.Get(request);
}
事实证明,这个问题完全是由于RestSharp造成的。 用沼泽标准 HttpClient 替换它解决了整个问题,因此它似乎是该库中的错误。