86 votes

Obtenez de l'emplacement de l'utilisateur par une adresse IP

J'ai un ASP.NET site web écrit en C#.

Sur ce site, j'ai besoin d'afficher automatiquement une page de démarrage basé sur la localisation de l'utilisateur.

Puis-je obtenir le nom de l'utilisateur de la ville en se basant sur l'adresse IP de l'utilisateur ?

47voto

Jon Skeet Points 692016

Vous avez besoin d'une adresse IP à base de géocodage inversé API... comme celui de hostip.info. Je suis sûr qu'il ya beaucoup d'options disponibles.

Vous pouvez également permettre à l'utilisateur de remplacer cela, cependant. Par exemple, ils pourraient être sur un VPN d'entreprise qui en fait l'adresse IP regardez comme il est dans un pays différent.

12voto

Donut Points 32892

IPInfoDB a une API que vous pouvez appeler dans le but de trouver un emplacement basé sur une adresse IP.

Pour la Ville "de Précision", vous l'appelez comme ça (vous aurez besoin de vous enregistrer pour obtenir un gratuitement une clé API):

 http://api.ipinfodb.com/v2/ip_query.php?key=<your_api_key>&ip=74.125.45.100&timezone=false

Voici un exemple à la fois VB et C# qui montre comment appeler l'API.

11voto

I have tried this and this json API is perfectly working . Prior You need to add the below mentioned 
namespaces.

using System.Linq;
using System.Web; 
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using System.Xml;
using System.Collections.Specialized;



For localhost it will give dummy data as AU. You can try hardcoding your Ip and get result

namespace WebApplication4
{
    public partial class WebForm1 : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
         {

          string VisitorsIPAddr = string.Empty;
          //Users IP Address.                
          if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
          {
              //To get the IP address of the machine and not the proxy
              VisitorsIPAddr =   HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
          }
          else if (HttpContext.Current.Request.UserHostAddress.Length != 0)
          {
              VisitorsIPAddr = HttpContext.Current.Request.UserHostAddress;`enter code here`
          }

          string res = "http://ipinfo.io/" + VisitorsIPAddr + "/city";
          string ipResponse = IPRequestHelper(res);

        }

        public string IPRequestHelper(string url)
        {

            string checkURL = url;
            HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
            StreamReader responseStream = new StreamReader(objResponse.GetResponseStream());
            string responseRead = responseStream.ReadToEnd();
            responseRead = responseRead.Replace("\n", String.Empty);
            responseStream.Close();
            responseStream.Dispose();
            return responseRead;
        }


    }
}

5voto

Chuck Callebs Points 8084

Vous aurez probablement à utiliser une API externe, la plupart de qui coûtent de l'argent.

J'ai trouvé ce que, semble être libre: http://api.hostip.info/

4voto

Ionică Bizău Points 14484

De retour du pays

static public string GetCountry()
{
    return new WebClient().DownloadString("http://api.hostip.info/country.php");
}

Utilisation:

Console.WriteLine(GetCountry()); // will return short code for your country

De retour d'info

static public string GetInfo()
{
    return new WebClient().DownloadString("http://api.hostip.info/get_json.php");
}

Utilisation:

Console.WriteLine(GetInfo()); 
// Example:
// {
//    "country_name":"COUNTRY NAME",
//    "country_code":"COUNTRY CODE",
//    "city":"City",
//    "ip":"XX.XXX.XX.XXX"
// }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X