2016-05-30 9 views
2

Ich versuche, eine HTTP-GET-Nachricht an den Google Standort Api zu senden, die JSON-Daten wie dieseWie kann ich JSON-Daten von Google API abrufen und in einer Variablen speichern?

https://maps.googleapis.com/maps/api/geocode/json?address=Los%20Angeles,CA=AIzaSyDABt , wie Sie die Antwort in Json ist bemerkt haben soll. Ich möchte dieser URL einen HTTP-Aufruf geben und den JSON-Inhalt in einer Variablen oder einem String speichern. Mein Code nicht gibt keine Fehler, aber es kehrt auch nichts

public async System.Threading.Tasks.Task<ActionResult> GetRequest() 
{ 
    var client = new HttpClient(); 

    HttpResponseMessage response = await client.GetAsync("https://maps.googleapis.com/maps/api/geocode/json?address=Los%20Angeles,CA=AIzaSyDABt"); 
    string data = response.Content.ToString(); 
    return data; 
} 

Ich mag eine GET-Anfrage senden, mit Httpclient() oder etwas, das die URL-Anforderung senden, und dann, dass der Inhalt in eine speichern Zeichenfolgevariable Irgendwelche Vorschläge würden geschätzt, wieder gibt mein Code keine Fehler aber es gibt nichts zurück.

+0

Welche Art von Anwendung macht die Anfrage? Dies macht einen großen Unterschied für die Antwort. –

+0

Es ist eine MVC4-Anwendung, ich mache grundsätzlich den Anruf, wenn die Controller-Aktion gesendet wird. Ich werde mehr von dem obigen Code posten. –

+0

Folgen Sie dem Baum der API, zum Beispiel long_name Sie müssen schreiben, results.adress_components.long_name –

Antwort

0

Verwenden ReadAsStringAsync die Json Antwort zu erhalten ...

static void Main(string[] args) 
{ 
    HttpClient client = new HttpClient(); 
    Task.Run(async() => 
    { 
     HttpResponseMessage response = await client.GetAsync("https://maps.googleapis.com/maps/api/geocode/json?address=Los%20Angeles,CA=AIzaSyDABt"); 
     string responseString = await response.Content.ReadAsStringAsync(); 
     Console.WriteLine(responseString); 
    }); 
    Console.ReadLine(); 
} 

Wenn Sie response.Content.ToString() verwenden es tatsächlich ist, so dass Sie den Datentyp des Inhalts in String konvertieren wird erhalten System.Net.Http.StreamContent

+0

Dank, die perfekt gearbeitet –

0

Versuchen Sie dies.

 var client = new HttpClient(); 
     HttpResponseMessage httpResponse = await client.GetAsync("https://maps.googleapis.com/maps/api/geocode/json?address=Los%20Angeles,CA=AIzaSyDABt"); 
     string data = await httpResponse.Content.ReadAsStringAsync(); 
+0

Danke, das auch richtig funktioniert. –

-1

Versuchen Sie, diese

public async static Task<string> Something() 
    {    
     var http = new HttpClient(); 
     var url = "https://maps.googleapis.com/maps/api/geocode/json?address=Los%20Angeles,CA=AIzaSyDABt"; 
     var response = await http.GetAsync(url); 
     if (response.IsSuccessStatusCode) 
     { 
      var result = await response.Content.ReadAsStringAsync(); 
      result = JsonConvert.DeserializeObject<string>(result); 
      return result; 
     } 
     return ""; 
    } 

var result = Task.Run(() => Something()).Result; 
0

Wie wäre es mit der Json framework für .NET powered by Newtonsoft? Sie können versuchen, Ihren Inhalt mit diesem String zu analysieren.

+0

Während dies theoretisch die Frage beantworten können, [es wäre vorzuziehen] (// meta.stackoverflow.com/q/8259) hier, die die wesentlichen Teile der Antwort aufzunehmen und den Link zur Referenz. – Raju

0

Nun kann der Code vereinfacht werden:

public async Task<ActionResult> GetRequest() 
{ 
    var client = new HttpClient(); 
    return await client.GetStringAsync("https://maps.googleapis.com/maps/api/geocode/json?address=Los%20Angeles,CA=AIzaSyDABt"); 
} 

jedoch ...

Mein Code keine Fehler geben, aber es ist auch nichts zurückkehr

Dies liegt fast sicher an der Verwendung von Result oder Wait weiter oben im Call-Stack. Blocking on asynchronous code like that causes a deadlock, dass ich auf meinem Blog vollständig erkläre. In der kurzen Version gibt es einen ASP.NET-Anforderungskontext, der nur jeweils einen Thread zulässt. await wird standardmäßig den aktuellen Kontext erfassen und in diesem Kontext fortsetzen; und da Wait/Result einen Thread in den Anforderungskontext blockiert, kann await die Ausführung nicht fortsetzen.

Verwandte Themen