在Bing地图上从纬度和经度获取位置数据时出错

时间:2011-11-24 20:23:12

标签: c# windows-phone-7 bing-maps bing-api restsharp

我正在使用Bingmaps API获取纬度和经度的AdminDistrict和CountryRegion。 它可以在浏览器中输入此URL:

http://dev.virtualearth.net/REST/v1/Locations/-30,-70/?includeEntityTypes=AdminDivision1,CountryRegion&o=xml&c=es-ES&key= myBingmapsApiKey

但是在WP7的C#中,我无法让它工作。 这是代码:

string wsUrl = "http://dev.virtualearth.net/REST/v1/Locations/-30,-70/?includeEntityTypes=AdminDivision1,CountryRegion&o=xml&c=es-ES&key=*myBingmapsApiKey*";

var request = new RestSharp.RestRequest(Method.GET);
var client = new RestSharp.RestClient(wsUrl);

try
{
    RestSharp.RestResponse resource;
    client.ExecuteAsync(request, (response) =>
    {
        resource = response;
        string content = resource.Content;
        string status_code = resource.StatusCode.ToString();
        string response_status = resource.ResponseStatus.ToString();
    });
}
catch (Exception e)
{
    string error = "Error: " + e.ToString() + "\n. Stack Trace: " + e.StackTrace;
}

响应是:

    <?xml version="1.0" encoding="utf-8"?>
    <Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/search/local/ws/rest/v1">
<Copyright>Copyright © 2011 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.</Copyright>
<BrandLogoUri>http://dev.virtualearth.net/Branding/logo_powered_by.png</BrandLogoUri>
<StatusCode>401</StatusCode><StatusDescription>Unauthorized</StatusDescription>
<AuthenticationResultCode>InvalidCredentials</AuthenticationResultCode>
<ErrorDetails><string>Access was denied. You may have entered your credentials incorrectly, or you might not have access to the requested resource or operation.</string></ErrorDetails>
<TraceId>59ebcf604bb343d79a6e8b93ad5695fe|MIAM001452|02.00.71.1600|</TraceId>
<ResourceSets />
    </Response>

网址与在网络浏览器上工作的网址相同。 什么可能是错的?

2 个答案:

答案 0 :(得分:3)

可能在这一点上你已经想出了一个解决方案,但是在google上搜索我找到了这个主题,解决方案是不像你那样通过url发送密钥,而是将它作为参数添加到请求中,如下所示: / p>

string wsUrl = "http://dev.virtualearth.net/REST/v1/Locations/-30,-70/";    

var request = new RestSharp.RestRequest(Method.GET);    
request.AddParameter("includeEntityTypes", "AdminDivision1,CountryRegion");
request.AddParameter("key", myLey);
request.AddParameter("o", "xml");

答案 1 :(得分:0)

如果我理解这一点,那么您使用的REST API may cost money。也许您的API密钥没有设置为可结算交易?

该页面说明了位置API的结算:

  

*如果此类别出现在AJAX控件或Silverlight控制会话的上下文中,则此类别不可计费。

也许浏览器算作AJAX控件而手机并不是“Silverlight Control”。