思路构建
1.先通过本地的测IP地址库进行匹配
2.如果本地IP地址库存在此IP的城市信息,就直接返回,调用速度也快
3.如果本地没有对应的IP城市信息,必须通过调用网络的IP查询的API了,这里我使用了(百度,新浪,和淘宝)
注意:百度的调用不是很正常,大批量调用
要引用dll Newtonsoft.Json.dll
下载地址:http://www.newtonsoft.com/products/json/
1.解压下载文件,得到Newtonsoft.Json.dll
2.在项目中添加引用..
3.兼容.net framwork2.0到4.5框架
使用NewtonSoft.JSON.dll来序列化和发序列化对象
1 #region 调用百度 新浪和淘宝接口返回地址 1.百度 2.新浪 3.淘宝
2 /// <summary>
3 /// 调用百度 新浪和淘宝接口返回地址 1.百度 2.新浪 3.淘宝
4 /// </summary>
5 /// <param name="Serve">1.百度 2.新浪 3.淘宝</param>
6 /// <param name="ipAddress"></param>
7 /// <returns></returns>
8 public string GetAddress(int Serve, string ipAddress)
9 {
10 try
11 {
12 var match =
13 new Regex(@"((?:(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(?:25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))))");
14 if (!match.IsMatch(ipAddress))
15 {
16 return string.Empty;
17 }
18 var webClient = new System.Net.WebClient();
19 NameValueCollection postValues = null;
20 // 向服务器发送POST数据
21 var url = string.Empty;
22 if (Serve == 1)
23 {
24 url = "http://api.map.baidu.com/location/ip";
25 postValues = new System.Collections.Specialized.NameValueCollection
26 {
27 {"ak", "MRkBd6jnGOf8O5F58KKrvit5"},
28 {"ip", ipAddress},
29 {"coor", "bd09ll"}
30 };
31 }
32 else if (Serve == 2)
33 {
34 url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php";
35 postValues = new System.Collections.Specialized.NameValueCollection
36 {
37 {"format", "json"},
38 {"ip", ipAddress}
39 };
40 }
41 else
42 {
43 url = "http://ip.taobao.com/service/getIpInfo.php";
44 postValues = new System.Collections.Specialized.NameValueCollection
45 {
46 {"ip", ipAddress}
47 };
48 }
49
50 byte[] responseArray = webClient.UploadValues(url, postValues);
51
52 string response = System.Text.Encoding.UTF8.GetString(responseArray);
53
54 var dataJson = JObject.Parse(response); //动态解析 正常的解析无法生效
55 string address = string.Empty;
56 //百度接口
57 if (Serve == 1)
58 {
59 if (dataJson["status"].ToString() == "0")
60 {
61 address = dataJson["content"]["address_detail"]["province"] + "," + dataJson["content"]["address_detail"]["city"];
62 }
63 }
64 //新浪接口
65 else if (Serve == 2)
66 {
67 if (dataJson["ret"].ToString() == "1")
68 {
69 address = dataJson["province"] + "," + dataJson["city"];
70 }
71 }
72 //淘宝接口
73 else
74 {
75 if (dataJson["code"].ToString() == "0")
76 {
77 if (!string.IsNullOrEmpty(dataJson["data"]["region"].ToString()))
78 address = dataJson["data"]["region"] + "," + dataJson["data"]["city"];
79 }
80 }
81 if (string.IsNullOrEmpty(address))
82 {
83 address = "局域网";
84 }
85 return address;
86 }
87 catch(Exception ex)
88 {
89 Console.WriteLine(ex.Message);
90 return string.Empty;
91 }
92 }
93 #endregion
调用方式:
ipAddressName = ipHelper.GetAddress(2, ipaddress);//调用新浪接口返回数据