1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C# 通过百度地图API 获取访问IP详细地址(上网IP的大致位置信息 一般为城市级别)

C# 通过百度地图API 获取访问IP详细地址(上网IP的大致位置信息 一般为城市级别)

时间:2020-09-23 13:06:35

相关推荐

C# 通过百度地图API 获取访问IP详细地址(上网IP的大致位置信息 一般为城市级别)

1.创建接受Json格式数据类

namespace BaiduMap{[Serializable]public class IpLocationResult{/// <summary>/// 结果状态返回码/// </summary>public String status {get; set; }/// <summary>/// 简要地址信息 /// </summary>public String address {get; set; }/// <summary>///详细地址信息/// </summary>public IpLocationResult_Content content {get; set; }}#region IpLocationResult_Content/// <summary>/// 定位Json数据类/// </summary>[Serializable]public class IpLocationResult_Content{/// <summary>/// 地址/// </summary>public String address {get; set; }/// <summary>/// 地址明细/// </summary>public IpLocationResult_Content_AddressDetail address_detail {get; set; }/// <summary>/// 经纬度/// </summary>public Coordinate point {get; set; }}/// /// 定位结果文本之地址明细/// [Serializable]public class IpLocationResult_Content_AddressDetail{/// <summary>/// 城市/// </summary>public String city {get; set; }/// <summary>/// 城市代码/// </summary>public String city_code {get; set; }/// <summary>/// 地区/// </summary>public String district {get; set; }/// <summary>/// 省份/// </summary>public String province {get; set; }/// <summary>/// 街道/// </summary>public String street {get; set; }/// <summary>/// 门牌号/// </summary>public String street_number {get; set; }}/// <summary>/// 经纬度/// </summary>public class Coordinate{/// <summary>/// 当前城市中心点经度/// </summary>public string x {get; set; }/// <summary>/// 当前城市中心点纬度/// </summary>public string y {get; set; }}#endregion}

通过百度地图的API接口请求数据

namespace BaiduMap{public class BaiduMapDal{/// <summary>/// 依据IP获取定位信息的URL模板。/// 参数1:百度地图API的KEY。/// 参数2:IP。/// </summary>public const string URL_GetIP = "http://api./location/ip?ak={0}&ip={1}&coor=bd09ll";public const string MAP_KEY_BAI_DU = "您申请的秘钥";/// <summary>/// 依据IP获取定位信息/// </summary>/// <param name="ip"></param>/// <returns></returns>public static IpLocationResult FetchLocation(String ip){if (String.IsNullOrWhiteSpace(ip)){return null;}String Url = String.Format(URL_GetIP, MAP_KEY_BAI_DU, ip);///发送请求信息.HttpWebRequest request;///接受请求信息.HttpWebResponse response;try{///发送请求URLrequest = HttpWebRequest.Create(Url) as .HttpWebRequest;///接受请求URLresponse = request.GetResponse() as .HttpWebResponse;using (System.IO.Stream stream = response.GetResponseStream()){using (System.IO.StreamReader sr = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8)){string Data = sr.ReadToEnd();System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();IpLocationResult detail = serializer.Deserialize<IpLocationResult>(Data);return detail;}}}catch (Exception){return null;}}}}

获取访问者IP方法

public class HelpDal{/// <summary>/// 获取本机的IP地址/// </summary>/// <returns></returns>public static string GetLocalIP(){string HostName = Dns.GetHostName(); //得到主机名IPHostEntry IpEntry = Dns.GetHostEntry(HostName);for (int i = 0; i < IpEntry.AddressList.Length; i++){//从IP地址列表中筛选出IPv4类型的IP地址//AddressFamily.InterNetwork表示此IP为IPv4,//AddressFamily.InterNetworkV6表示此地址为IPv6类型if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork){return IpEntry.AddressList[i].ToString();}}return null;}/// <summary>/// 获取访问者IP地址/// </summary>/// <returns></returns>public static string GetVisitIP(){string userIP = "";// HttpRequest Request = HttpContext.Current.Request; HttpRequest Request = System.Web.HttpContext.Current.Request; // 如果使用代理,获取真实IP if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != ""){userIP = Request.ServerVariables["REMOTE_ADDR"];}else{userIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];}if (userIP == null || userIP == ""){userIP = Request.UserHostAddress;}return userIP;}}

使用方法

IP = HelpDal.GetVisitIP();IpLocationResult Model = BaiduMapDal.FetchLocation(IP);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。