2017-03-07 66 views
0

拳頭在所有抱歉爲我的壞英語。從客戶端獲取IP信息到Web Api

我試圖讓登錄選項中的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); 
}); 

用戶可以修改這個值給我虛假數據在登錄和我沒有如何驗證,如果這些信息是有效的或真實的。所以,問題是¿我如何在不讓用戶操縱這些數據的情況下做到這一點?

+0

不是向http://ipinfo.io/json您應該請求http://ipinfo.io/ /JSON作爲每https://ipinfo.io/developers在服務器上的 –

回答

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; 
      } 


     } 
+0

是正常的在本地測試得到字符串ip =「:: 1」? –

+0

我沒有得到你想說的話嗎? – ISHIDA

+0

This HttpContext.Current.Request.ServerVariables [「HTTP_X_FORWARDED_FOR」];讓我空。 This HttpContext.Current.Request.ServerVariables [「REMOTE_ADDR」];讓我「」1「作爲價值。 –