在ASP.NET中检测/估计http请求的国家/地区

时间:2009-08-17 12:33:46

标签: c# asp.net http

我正在寻找方法来检测/估算 http >来自 http 。<登记/> 我知道有一些服务/国家查找解决方案,但我从未使用过
我正在寻找小型/清洁的解决方案 这是为了帮助某人填写表格,因此它不必100%准确。

提前致谢..

5 个答案:

答案 0 :(得分:11)

您可以对此网址发出简单的HTTP请求:

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

使用REMOTE_ADDR服务器变量的值。这会像这样返回这个国家和城市:

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

我正如您所描述的那样将该服务用于Web表单。偶尔它不知道答案,但通常它非常好(而且它是免费且简单的8 - )

在C#中,您可以使用System.Net.WebRequest.Create来读取网址。

答案 1 :(得分:6)

您可以使用其中一种可用的网络服务来匹配对某个国家/地区的传入请求。

否则,您可能决定获取MaxMind数据库文件(GeoLite Country),从应用程序中的此文件中读取并执行匹配。因此,您将独立于第三方服务,仅定期提取数据库文件的更新。

同时查看类似的问题:

Geolocation web service recommendations

Know a good IP address Geolocation Service?

答案 2 :(得分:3)

如果您选择使用REMOTE_ADDR服务器变量,则可以确定您准确恢复的IP代表该用户的原始国家/地区。用户从他当前所在国家/地区以外的地方访问互联网的情况相当罕见,除了一些明显的例外,例如那些选择通过匿名代理服务器浏览的人,如下所述。但是,如果您想获得用户来自的状态,或者验证用户的身份,那么就任何远程可靠的方法而言,您都会失去运气。

更多信息here.

答案 3 :(得分:0)

我必须这样做,所以这是一个可能对某人有用的工作示例(特定于法国):

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

答案 4 :(得分:0)

这就是我用过的:

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

简单,而且有效。