如何从Google API获取JSON数据并将其存储在变量中?

时间:2016-05-30 23:23:28

标签: c# json asp.net-mvc-4 google-api

我正在尝试将Http Get消息发送到Google位置Api,该位置应该包含此类Json数据

https://maps.googleapis.com/maps/api/geocode/json?address=Los%20Angeles,CA=AIzaSyDABt 你注意到答案是在Json。我想给该URL发出一个Http调用,并将Json内容保存在变量或字符串中。我的代码没有给出任何错误,但它也没有返回任何内容

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

我想使用HttpClient()或任何发送URL请求的内容发送一个Get Request,然后将该内容保存到字符串变量中。任何建议将不胜感激,我的代码再次没有错误,但它没有返回任何东西。

5 个答案:

答案 0 :(得分:0)

试试这个。

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

答案 1 :(得分:0)

使用ReadAsStringAsync获取json响应...

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

如果您使用response.Content.ToString(),它实际上是将内容的数据类型转换为字符串,以便您获得System.Net.Http.StreamContent

答案 2 :(得分:0)

如何使用由Newtonsoft提供支持的.NET Json framework? 您可以尝试使用此内容将内容解析为字符串。

答案 3 :(得分:0)

嗯,您的代码可以简化:

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

...然而

  

我的代码没有发出任何错误,但它也没有返回任何内容

这几乎可以肯定是由于在调用堆栈中使用了ResultWaitBlocking on asynchronous code like that causes a deadlock我在博客上全面解释。简短版本是有一个ASP.NET请求上下文,一次只允许一个线程;默认情况下,await将捕获当前上下文并在该上下文中恢复;由于Wait / Result阻止请求上下文中的线程await无法继续执行。

答案 4 :(得分:-1)

试试这个

ready