Определить/оценить страну http-запроса в ASP.NET

Я ищу способы определить/оценить страну, из которой http-запрос входит ASP.NET. < ш > Я знаю, что есть некоторые решения с услугами/поиском в стране, но я никогда не использовал их.

Я ищу небольшие/чистые решения.
Это помогает кому-то заполнить форму, чтобы она не была на 100% точнее.

Спасибо заранее.

Ответы

Ответ 1

Вы можете использовать одну из доступных веб-сервисов для соответствия входящему запросу в страну.

В противном случае вы можете решить захватить файл базы данных MaxMind (GeoLite Country), прочитать из этого файла в своем приложении и выполнить совпадение. Таким образом, вы будете независимы от стороннего сервиса, только регулярно выгружая обновления для файла базы данных.

Также проверьте похожие вопросы:

Рекомендации веб-службы геолокации

Знать хороший IP-адрес Geolocation Service?

Ответ 2

Вы можете сделать простой HTTP-запрос по этому URL-адресу:

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

используя значение переменной сервера REMOTE_ADDR. Это вернет страну и город следующим образом:

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

Я использую эту службу для веб-формы так же, как вы описываете. Иногда он не знает ответа, но обычно это очень хорошо (и это бесплатно и просто 8 -)

В С# вы можете использовать System.Net.WebRequest.Create для чтения с URL-адреса.

Ответ 3

Если вы решите использовать переменную сервера REMOTE_ADDR, вы можете быть уверены, что IP-адрес, который вы восстанавливаете, точно представляет страну происхождения этого пользователя. Для пользователя довольно редко возникает доступ к Интернету за пределами страны, в которой он сейчас находится, с несколькими заметными исключениями, например, теми, кто предпочитает работать в анонимном прокси-сервере, например, обсуждается ниже. Если, однако, вы хотите получить состояние, из которого пользователь приходит или аутентифицировать личность пользователя, вам не повезло, насколько любой даже отдаленно надежный метод.

Подробнее здесь.

Ответ 4

Мне просто нужно было сделать это, вот рабочий пример (специфический для Франции), который может кому-то помочь:

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

Ответ 5

Это то, что я использовал:

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

Простой, и он работает.