从客户端获取IP信息到Web Api

时间:2017-03-07 16:54:55

标签: angularjs security asp.net-web-api ip

对我糟糕的英语抱歉。

我正在尝试在登录选项中获取IP,将它们保存为数据库中的“会话”,并注册使用该应用程序的人员和位置。

我试试这个,但很明显它不起作用。

var ip = new System.Net.WebClient().DownloadString("http://ipinfo.io/json");

它获取IP客户端。因此,我需要在客户端进行此操作。但问题是客户端可以在发送到Web API之前更改此值

$http.get("http://ipinfo.io/json").then(function (response) {
    return response.data;
}).catch(function (response) {
   console.log(response.data);
});

用户可以更改此值以在登录中向我发送错误数据,而我无法验证此信息是有效还是真实。所以,问题是¿如何在不让用户操纵这些数据的情况下做到这一点?

1 个答案:

答案 0 :(得分:0)

在Web API中创建一个方法,我们可以将所需的所有信息直接保存到数据库中。

   public static string UserIp()
        {
            string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            if (string.IsNullOrEmpty(ip))
            {
                ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
            }

            try
            {
                string url1 = "http://geoip.nekudo.com/api/" + ip.ToString(); // passing IP address will return location information. 
                WebClient client = new WebClient(); // Intialize the webclient 
                string jsonstring = client.DownloadString(url1);
                dynamic dynObj = JsonConvert.DeserializeObject(jsonstring); // De-serialize the JSON string
                string filePath = AppDomain.CurrentDomain.BaseDirectory + "\\App_Data\\Logs\\" + "Ip.txt";
                using (System.IO.StreamWriter writer = new StreamWriter(filePath, true))
                {
// you can save the information to database instead of writing to a file 

                    writer.WriteLine("UserIp:" + ip);
                    writer.WriteLine("Date:" + DateTime.Now);
                    writer.WriteLine("JsonString:" + jsonstring);
                    writer.WriteLine("Country name:" + dynObj.country.code);

                }

                return dynObj;


            }
            catch (Exception ex)
            {
                string filePath = AppDomain.CurrentDomain.BaseDirectory + "\\App_Data\\Logs\\" + "I.txt";
                string url1 = "http://geoip.nekudo.com/api/" + ip.ToString();
                WebClient client = new WebClient(); // Intialize the webclient 
                string jsonstring = client.DownloadString(url1);
                dynamic dynObj = JsonConvert.DeserializeObject(jsonstring);
                //  string a = dynObj.country.code;
                using (System.IO.StreamWriter writer = new StreamWriter(filePath, true))
                {
                    writer.WriteLine("Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" +
                                     ex.StackTrace +
                                     "" + Environment.NewLine + "Date :" + DateTime.Now.ToString());

                    writer.WriteLine("UserIp:" + ip);
                    writer.WriteLine("Dynamic obj:" + dynObj);
                }
                return null;
            }


        }