facdler

时间:2017-01-07 01:08:22

标签: c# google-api clientaccesspolicy.xml

我正在使用Google的GeoCode API来返回用户在搜索框中输入的地址的纬度/经度值。我的代码似乎是正确的,但我遇到了安全异常问题。当我使用Fiddler检查呼叫时,我可以看到正在发送的呼叫,但是clientaccesspolicy.xml存在问题。

似乎我的WPF应用程序要求Google拥有clientaccesspolicy.xml但Google没有。因此,我可能需要代理才能调用Google的API。任何想法或解决方法?

private void RequestResponseHandler(IAsyncResult asyncResult)
{
    HttpWebResponse response = null;
    Stream responseStream = null;
    try
    {
        response = (HttpWebResponse)request.EndGetResponse(asyncResult);
        responseStream = response.GetResponseStream();
        var xdoc = XDocument.Load(responseStream);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

的Fiddler enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

据我了解,您在Silverlight应用程序中使用此代码,这对于跨域请求非常挑剔。在执行任何请求之前,Silverlight运行时会尝试在目标服务器上找到clientaccesspolicy.xml(在您的情况下为maps.googleapis.com),如果失败,它会尝试查找crossdomain.xml。显然,服务器没有这样的文件,因此运行时抛出SecurityException。

作为解决方法,您可以将请求代理到Google Maps API:

  • 您的Silverlight应用程序向托管该应用程序的服务器发送请求(以及相应的clienataccesspolicy.xml)
  • 您的网络服务器接受请求并将其重新发送给Google API,然后返回API对您的应用的响应。