2009-08-17 6 views
13

szukam sposobów wykrywania/oszacować krajz którego http-request nadchodzi w ASP.NET.
Wiem, że są pewne rozwiązania z wyszukiwaniem usług/krajów, ale nigdy ich nie używałem.

Szukam małych/czystych rozwiązań.
Ma to pomóc komuś wypełnić formularz, więc nie musi być w 100% dokładny.
Detect/oszacowanie kraj na żądanie HTTP w ASP.NET

góry dzięki ..

Odpowiedz

6

Można użyć jednej z dostępnych usług internetowych, aby dopasować przychodzące żądanie do kraju.

W przeciwnym razie możesz zdecydować się na pobranie pliku bazy danych MaxMind (GeoLite Country), przeczytać z tego pliku w aplikacji i wykonać dopasowanie. W ten sposób będziesz niezależny od usługi innej firmy, pobierając jedynie regularne aktualizacje dla pliku bazy danych.

również sprawdzić podobne pytania:

Geolocation web service recommendations

Know a good IP address Geolocation Service?

+1

Wybieram tabelę Kraj GeoLite. Dzięki –

3

Jeśli zdecydujesz się użyć zmiennej serwera REMOTE_ADDR, można mieć pewność, że adres IP, który można odzyskać dokładnie reprezentuje naród pochodzenia tego użytkownika. To dość rzadkie, że użytkownik uzyskuje dostęp do Internetu spoza kraju, w którym aktualnie się znajduje, z kilkoma godnymi uwagi wyjątkami, na przykład tymi, którzy decydują się na surfowanie po anonimowym serwerze proxy, tak jak to omówiono poniżej. Jeśli jednak chcesz uzyskać stan, z którego pochodzi użytkownik lub uwierzytelnić tożsamość użytkownika, oznacza to, że nie masz szczęścia, jeśli chodzi o jakikolwiek nawet zdalny i wiarygodny sposób.

Więcej informacji here.

11

Można zrobić prosty żądanie HTTP do tego URL:

http://api.hostip.info/get_html.php?ip=207.46.197.32 

wykorzystując wartość zmiennej serwera REMOTE_ADDR . To zwróci kraj i miasto w ten sposób:

Country: UNITED STATES (US) 
City: New York, NY 

Używam tej usługi do formularza internetowego, tak jak opisujesz. Czasami nie zna odpowiedzi, ale zazwyczaj jest bardzo dobra (i jest darmowa i prosta 8-)

W języku C# można użyć System.Net.WebRequest.Create do odczytania z adresu URL.

0

po prostu musiałem to zrobić tak oto przykład roboczy (specyficzne dla Francji), które mogą być przydatne dla kogoś:

 string userIP = Request.ServerVariables["REMOTE_ADDR"]; 
     string localeAPIURL = "http://api.hostip.info/get_html.php?ip=" + userIP; 

     HttpWebRequest r = (HttpWebRequest)WebRequest.Create(localeAPIURL); 
     r.Method = "Get"; 
     HttpWebResponse res = (HttpWebResponse)r.GetResponse(); 
     Stream sr = res.GetResponseStream(); 
     StreamReader sre = new StreamReader(sr); 

     // check response for FRANCE 
     string s = sre.ReadToEnd(); 
     string sub = s.Substring(9, 6); 
     if (sub == "FRANCE") 
     { 
      Response.Redirect("http://fr.mysite.com"); 
     } 
+0

cześć, gdzie umieściłeś ten kod?a także w jaki sposób mogę sprawdzić tylko przy logowaniu/rejestracji – transformer

0

To właśnie użyłem:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      'url': 'http://www.freegeoip.net/json/@(HttpContext.Current.Request.UserHostAddress)', 
      'type': 'GET', 
      'success': function(data) { 
       // for example 
       if (data.country_code === "GB") { 
        ... further logic here 
       } 
      } 
     }); 
    }); 
</script> 

Proste i działa.