我正在尝试向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");
}
然而。。。
我的代码没有给出任何错误,但它也没有返回任何内容
这几乎可以肯定是由于在调用堆栈中进一步向上使用 Result
或 Wait
。像这样阻止异步代码会导致死锁,我在博客上完整解释了。简短的版本是有一个 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;