ASP.NET中调用Google API无响应,请求超时问题求助
解决Google Places Autocomplete API请求超时问题
Hey,我看了你的代码,问题主要出在这几个地方:
请求方式不对
Google Places Autocomplete的autocomplete接口只支持GET请求,但你用了WebClient.UploadString——这个方法是用来发送POST请求的,API根本不会处理你的POST请求,所以会一直等到超时。
URL格式有问题
你URL里的&是HTML转义后的字符,直接放在URL里会导致参数解析错误,应该换成普通的&。另外,你把空格替换成逗号的操作不规范,正确的做法是对输入内容做URL编码,这样不管输入里有什么特殊字符,都不会破坏URL结构。
资源管理可以优化
没有用using来管理WebClient,虽然这不是超时的直接原因,但容易造成资源泄漏,建议加上。
修正后的代码如下,我加了注释和异常处理,方便你调试:
using System; using System.Net; using System.Web; class PlaceAutocompleteExample { static void Main() { // 对输入文本进行URL编码,处理空格、特殊字符 string inputText = HttpUtility.UrlEncode("Andheri West"); string apiKey = "AIzaSyA5WiXTvjPSXEMGwFP0olr9vQuHSk-GVjY"; // 构造正确的API请求URL,用&分隔参数 string apiUrl = $"https://maps.googleapis.com/maps/api/place/autocomplete/json?input={inputText}&key={apiKey}"; // 使用using自动释放WebClient资源 using (WebClient webClient = new WebClient()) { // 设置代理凭据(如果你的网络环境需要代理访问外网) WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials; try { // 发送GET请求并获取响应字符串 string responseString = webClient.DownloadString(apiUrl); // 这里可以处理responseString,比如解析JSON Console.WriteLine("API响应:"); Console.WriteLine(responseString); } catch (WebException ex) { Console.WriteLine($"请求失败:{ex.Message}"); // 如果API返回了错误响应,打印出来方便排查 if (ex.Response != null) { using (var responseReader = new System.IO.StreamReader(ex.Response.GetResponseStream())) { Console.WriteLine("API错误详情:"); Console.WriteLine(responseReader.ReadToEnd()); } } } } } }
另外还有几个需要注意的点:
- 确认你的API密钥已经启用了Places API权限,并且没有超出配额,否则API会返回错误(可能表现为超时或者无响应)。
- 如果你的环境有防火墙或者公司代理,要确保代理配置正确,能正常访问Google的API服务器。
内容的提问来源于stack exchange,提问作者Nadeem
相关产品推荐
相关产品推荐

