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



我正在尝试向Google位置Api发送Http Get消息,该消息应该具有诸如此类的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 请求的内容发送获取请求,然后将该内容保存到字符串变量中。任何建议将不胜感激,同样,我的代码没有给出任何错误,但它没有返回任何内容。

使用 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

试试这个。

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

使用由Newtonsoft提供支持的.NET的Json框架怎么样?您可以尝试使用此内容将内容解析为字符串。

好吧,您的代码可以简化:

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

然而。。。

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

这几乎可以肯定是由于在调用堆栈中进一步向上使用 ResultWait。像这样阻止异步代码会导致死锁,我在博客上完整解释了。简短的版本是有一个 ASP.NET 请求上下文,一次只允许一个线程; 默认情况下,await将捕获当前上下文并在该上下文中恢复;由于 Wait/Result 在请求上下文阻塞了线程,因此await无法恢复执行。

试试这个

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;

相关内容

  • 没有找到相关文章

最新更新