完整調用示例
using System.Net.Http;
using Newtonsoft.Json;
public class BaiduLocation {
public string address { get; set; }
public Content content { get; set; }
public class Content {
public Point point { get; set; }
public class Point { public double x, y; }
}
}
public async Task GetLocationAsync(string ip) {
var url = $"https://api.map.baidu.com/location/ip?ak=YOUR_AK&ip={ip}&coor=bd09ll";
using (var client = new HttpClient()) {
string json = await client.GetStringAsync(url);
return JsonConvert.DeserializeObject(json);
}
}
// 調用
var loc = await GetLocationAsync("118.113.163.95");
Console.WriteLine($"經度:{loc.content.point.x}, 緯度:{loc.content.point.y}");
關鍵點
- HttpClient 復用:單例或 DI 注入,避免 Socket 耗盡。
- 異步 await:不阻塞線程,Web 應用必須。
- JSON.NET 反序列化:
JsonConvert.DeserializeObject 自動映射。
- 錯誤處理:捕獲
HttpRequestException、檢查 status 字段(百度返回 0 成功)。
舊版 WebClient 寫法(不推薦)
using (var wc = new WebClient()) {
string json = wc.DownloadString(url); // 同步阻塞
// 同樣用 JsonConvert 解析
}