ASP.NET MVC 获取客户端ip和对应的城市
【分享】实现思路,先获取访问者ip,再通过ip调用淘宝API库,获取该ip所在的位置,即所在城市。
实体类:
/// <summary>
/// 调用淘宝API,返回结果实体类
/// </summary>
public class TheModel
{
public int code { get; set; }
public CityModel data { get; set; }
}
/// <summary>
/// 城市实体类
/// </summary>
public class CityModel
{
public string country { get; set; }
public string country_id { get; set; }
public string area { get; set; }
public string area_id { get; set; }
public string region { get; set; }
public string region_id { get; set; }
public string city { get; set; }
public string city_id { get; set; }
public string county { get; set; }
public string county_id { get; set; }
public string isp { get; set; }
public string isp_id { get; set; }
public string ip { get; set; }
}
控制器代码:
/// <summary>
/// 前台调用的接口
/// *在局域网下是没法玩的,需自己设置theip的值。如: 219.142.153.240*
/// </summary>
/// <returns></returns>
public JsonResult GetIPCity()
{
JsonResult json = new JsonResult();
string theip = GetWebClientIp();
string cityjson = GetstringIpAddress(theip);
CityModel city = JsonConvert.DeserializeObject<TheModel>(cityjson).data;
string thecity = city.country + city.city;
json.Data = new { theip = theip, thecity = thecity };
return json;
}
/// <summary>
/// 获取客户端ip
/// </summary>
/// <returns></returns>
private static string GetWebClientIp()
{
string userIP = "";
try
{
if (System.Web.HttpContext.Current == null
|| System.Web.HttpContext.Current.Request == null
|| System.Web.HttpContext.Current.Request.ServerVariables == null)
return "";
string CustomerIP = "";
//CDN加速后取到的IP simone 090805
CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
if (!string.IsNullOrEmpty(CustomerIP))
{
return CustomerIP;
}
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!String.IsNullOrEmpty(CustomerIP))
{
return CustomerIP;
}
if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
{
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (CustomerIP == null)
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
else
{
CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if (string.Compare(CustomerIP, "unknown", true) == 0)
return System.Web.HttpContext.Current.Request.UserHostAddress;
return CustomerIP;
}
catch { }
return userIP;
}
/// <summary>
/// 调用淘宝API获取城市信息
/// </summary>
/// <param name="strIP"></param>
/// <returns></returns>
public static string GetstringIpAddress(string theip) //strIP为IP
{
string theurl = "http://ip.taobao.com/service/getIpInfo.php?ip=" + theip + "";
string result = string.Empty;
System.Uri objurl = new System.Uri(theurl);
System.Net.WebRequest objreq;
System.Net.WebResponse objres;
System.IO.StreamReader sr;
try
{
objreq = System.Net.WebRequest.Create(objurl);
objres = objreq.GetResponse();
sr = new System.IO.StreamReader(objres.GetResponseStream());
result = sr.ReadToEnd();
sr.Close();
objres.Close();
}
catch
{
}
finally
{
}
return result;
}
我对你的头像比较感兴趣英文不好看不懂 来看头像的举爪{:17_1062:} 虽然是非常基础的东西,还是给你一个支持吧、 实质还是借别人的api呀 慕克利Sera 发表于 2016-11-30 16:50
实质还是借别人的api呀
对,至于那个api后面做了些什么,说实话,我真不知道。但是这个思路能满足大部分企业级项目的要求了。 太需要了!!!!先回复,收藏 不用MVC框架获取客户端ip和对应城市怎么做呢,还有页面关闭时记录时间等怎么写入数据库啊 MartinLee 发表于 2016-11-30 18:50
不用MVC框架获取客户端ip和对应城市怎么做呢,还有页面关闭时记录时间等怎么写入数据库啊
“不用MVC怎么做”我不知道你的疑惑在那里?用不用MVC其实没有关系,都是C#的代码,只要是.NET的环境都是可以用的!页面关闭是一个事件,你先想办法捕捉到这个事件,然后在这个事件中写一个函数来访问服务器,在服务器端获取当前时间并且记录到数据库。 实话说,根据IP的归属判断所在城市很不准确,例如我在武汉,我使用改的电信网络显示的是在襄阳...
页:
[1]
2