2017-01-06 48 views
0

我的請求無法正常工作。我有一個搜索框與搜索按鈕。用戶可以在搜索框中輸入地址,然後將地址發送到Google的API。但由於某些原因,這不起作用。有誰知道爲什麼?我還會在調試時包含一個request的值。Google API WebRequest不工作​​

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); 
    } 
} 

enter image description here

+0

是什麼讓你覺得這個請求有什麼問題?什麼是預期的,你得到的實際結果是什麼?另外,最好不要向公衆公開API密鑰。 –

+0

那麼當調試這三個異常時,會出現'response',然後進入'RequestResponseHandler'並在response =(HttpWebResponse)request.EndGetResponse(asyncResult);'中斷。我也可以分享這個照片。 – daveskylark

+0

這些例外是完全正常的。用您的代碼查看我的答案。 –

回答

1

地址解析API返回JSON。例如: https://maps.googleapis.com/maps/api/geocode/json?address=fifth%20avenue&key=AIzaSyCgsNpuUoH7m6U7lqeZjlLZ3MgM15PW15o

但在這裏,你正試圖把這個JSON轉換爲XML文檔:

var xdoc = XDocument.Load(responseStream); 

我會使用JSON解析器,而不是建議你。

現在你已經顯示了實際的異常似乎在所處的環境,你的工作(Silverlight的?)你沒有權限訪問跨域資源:

enter image description here

因爲這個,你得到了一個Security Error。根據您正在使用的實際環境,可能有不同的方法來解決此問題。例如在Silverlight中,您可能需要include a clientaccesspolicy.xml文件才能進行跨域調用。在這個文件中,你需要明確地允許你需要發送HTTP請求的域名(在你的情況下,這將是maps.googleapis.com)。

+0

我可以在示例uri中將'json'更改爲xml。但是這並不能解決問題。 – daveskylark

+0

我看到,當你說它在request.EndGetResponse行中斷了時,拋出的確切異常是什麼?它是否進入「catch」條款? –

+0

我添加了另一張圖片......它打到第一行然後進入catch子句。 – daveskylark