吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7985|回复: 10
收起左侧

[其他转载] ASP.NET MVC 获取客户端ip和对应的城市

[复制链接]
Naylor 发表于 2016-11-30 15:17
【分享】

实现思路,先获取访问者ip,再通过ip调用淘宝API库,获取该ip所在的位置,即所在城市。

实体类:

[C#] 纯文本查看 复制代码
 /// <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; }
    }


控制器代码:

[C#] 纯文本查看 复制代码
  /// <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;
        }

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

吾爱丨破解 发表于 2016-11-30 15:23
我对你的头像比较感兴趣英文不好看不懂
a542013194 发表于 2016-11-30 15:34
如花美眷 发表于 2016-11-30 15:34
虽然是非常基础的东西,还是给你一个支持吧、
慕克利Sera 发表于 2016-11-30 16:50
实质还是借别人的api呀
 楼主| Naylor 发表于 2016-11-30 18:43
慕克利Sera 发表于 2016-11-30 16:50
实质还是借别人的api呀

对,至于那个api后面做了些什么,说实话,我真不知道。但是这个思路能满足大部分企业级项目的要求了。
MartinLee 发表于 2016-11-30 18:48 来自手机
太需要了!!!!先回复,收藏
MartinLee 发表于 2016-11-30 18:50 来自手机
不用MVC框架获取客户端ip和对应城市怎么做呢,还有页面关闭时记录时间等怎么写入数据库啊
 楼主| Naylor 发表于 2016-12-10 16:25
MartinLee 发表于 2016-11-30 18:50
不用MVC框架获取客户端ip和对应城市怎么做呢,还有页面关闭时记录时间等怎么写入数据库啊

“不用MVC怎么做”  我不知道你的疑惑在那里?用不用MVC其实没有关系,都是C#的代码,只要是.NET的环境都是可以用的!页面关闭是一个事件,你先想办法捕捉到这个事件,然后在这个事件中写一个函数来访问服务器,在服务器端获取当前时间并且记录到数据库。
liuyuntianxia12 发表于 2017-7-10 10:14
实话说,根据IP的归属判断所在城市很不准确,例如我在武汉,我使用改的电信网络显示的是在襄阳...
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 10:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表