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.map.baidu.com/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);
///发送请求信息
System.Net.HttpWebRequest request;
///接受请求信息
System.Net.HttpWebResponse response;
try
{
///发送请求URL
request = HttpWebRequest.Create(Url) as System.Net.HttpWebRequest;
///接受请求URL
response = request.GetResponse() as System.Net.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);