2017-01-06 8 views
0

Я пытаюсь сделать запрос API Googles. Но я получаю сообщение об ошибке GetResponse(). Ошибка я получаю ...Ошибка GetResponse() из-за 'WebRequest'

'WebRequest' does not contain a definition for 'GetResponse'...

Visual Studio дает мне возможность заменить, что с BeginGetResponse(), но я не уверен, как отформатировать код или изменить то, что у меня уже есть для достижения этой цели. Может ли кто-нибудь указать мне право направить это решение? Возможно, мне не хватает некоторых сборок ... но я не думаю, что это так.

private void SearchButton_Click(object sender, RoutedEventArgs e) 
    {  
     var address = addressInput.Text; 
     var requestUri = string.Format("https://maps.googleapis.com/maps/api/geocode/json?address={0}&sensor=false", Uri.EscapeDataString(address)); 

     MessageBox.Show(requestUri.ToString()); 


     var request = WebRequest.Create(requestUri); 
     var response = request.GetResponse(); 
     var xdoc = XDocument.Load(response.GetResponseStream());  

     var result = xdoc.Element("GeocodeResponse").Element("result"); 
     var locationElement = result.Element("geometry").Element("location"); 
     var lat = locationElement.Element("lat"); 
     var lng = locationElement.Element("lng"); 
} 
+0

попробуйте выполнить его, (HttpWebResponse) request.GetResponse(); – Ferryzijl

+0

Я пробовал это, и GetResponse() по-прежнему несовместим. – daveskylark

+0

какое приложение вы пишете? –

ответ

2

Вы можете использовать асинхронный так:

var request = WebRequest.Create(requestUri); 
request.BeginGetResponse(this.FinishWebRequest, request); 

и затем иметь FinishWebRequest метод, который будет вызываться после того, как удаленный сервер отправляет ответ:

private void FinishWebRequest(IAsyncResult result) 
{ 
    var request = (HttpWebRequest)result.AsyncState; 
    using (var response = request.EndGetResponse(result)) 
    using (var responseStream = response.GetResponseStream()) 
    { 
     var xdoc = XDocument.Load(responseStream); 
     ... 
    } 
} 

или если вы предпочитаете использовать анонимный метод:

var request = WebRequest.Create(requestUri); 
request.BeginGetResponse(result => 
{ 
    using (var response = request.EndGetResponse(result)) 
    using (var responseStream = response.GetResponseStream()) 
    { 
     var xdoc = XDocument.Load(responseStream); 
     ... 
    } 
}, null); 
+0

Не нужно ли использовать метод BeginGetResponseStream? – daveskylark

+0

Да, вам нужно, как показано в моем примере: 'response.BeginGetResponseStream (this.FinishGetResponseStream, response);'. После получения объекта ответа в обратном вызове 'FinishWebRequest', следующая вещь, которую вы делаете, это' BeginGetResponseStream', чтобы он мог получить окончательный объект «Stream» в обратном вызове «FinishGetResponseStream». –

+0

Можете ли вы дать несколько советов? Ошибка времени компиляции? Ошибка выполнения? Что-то другое? –