如何在ASP.NET MVC中使用IP地址获取地理位置。

6

我知道这段代码:

string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if (string.IsNullOrEmpty(ipAddress))
        {
            ipAddress = Request.ServerVariables["REMOTE_ADDR"];
        }

这段代码可以获取用户的IP地址,但我不知道如何获取用户的位置信息。

我希望能根据IP地址了解用户的位置和相关信息。


你要找的是“地理位置”。像“HTML地理位置”这样的谷歌搜索会产生很多结果,例如:https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation。相反,如果你想要对给定的IP地址进行地理定位,可以尝试使用“地理编码”,其中有许多API可供使用,例如:https://developers.google.com/maps/documentation/geocoding/。 - David
http://www.codeproject.com/Articles/185508/IP-Address-to-Geolocation 这是你需要的。 - Mehmet Eren Yener
注意:IP地址通常足以将用户缩小到特定的国家,但更多的信息是模糊的。IP地址位置将解析为它所属的ISP节点,如果它是一个大城市(如纽约),则可能是一个特定的城市,但在更郊区或农村地区,可能只会解析到用户所在的州,甚至只是像美国中西部这样的地区。澄清一下,我所说的是解析到用户的实际位置。你会得到完整的城市、州等信息,但那是针对节点而不是用户的。 - Chris Pratt
同时,VPN和代理服务可以掩盖用户的真实IP地址和位置。如果美国用户使用中国代理,他们可以伪装成来自中国的用户。换句话说,不要依赖这些信息进行任何重要事情。如果您需要用户的位置信息以实现真正的目的,请直接向他们询问。 - Chris Pratt
3个回答

8
这应该会帮助你 - http://freegeoip.net/ freegeoip.net 是一个公共的 REST API,用于搜索 IP 地址和主机名的地理位置。发送 HTTP GET 请求到:freegeoip.net/{格式}/{IP_地址或主机名}。该 API 支持 HTTP 和 HTTPS,并支持 csv、xml 或 json 格式。

4

用户位置绑定模型

public class IpInfo
{
    [JsonProperty("ip")]
    public string Ip { get; set; }


    [JsonProperty("city")]
    public string City { get; set; }

    [JsonProperty("region_name")]
    public string Region { get; set; }

    [JsonProperty("country_name")]
    public string Country { get; set; }

    [JsonProperty("time_zone")]
    public string TimeZone { get; set; }


    [JsonProperty("longitude")]
    public string Longitude { get; set; }

    [JsonProperty("latitude")]
    public string Latitude { get; set; }      
}

函数

private  IpInfo GetUserLocationDetailsyByIp(string ip)
    {
        var ipInfo = new IpInfo();
        try
        {
            var info = new WebClient().DownloadString("http://freegeoip.net/json/" + ip);
            ipInfo = JsonConvert.DeserializeObject<IpInfo>(info);
        }
        catch (Exception ex)
        {
            //Exception Handling
        }

        return ipInfo;
    }

使用IP值调用函数

var ipDetails = GetUserCountryByIp("8.8.8.8"); //IP value

1
这篇文章是给那些在2022年寻找答案的人的 :).
你可以使用 ip3country-dotnet。它是一个小型库,不到500KB。该库使用ip2location的精简版,完全免费!
使用方法: 安装IP3Country,然后编写以下代码
// Lookup using ip4 str
var country = CountryLookup.LookupIPStr("123.45.67.8"); // => 'KR'

// Lookup using numeric ip
country = CountryLookup.LookupIPNumber(2066563848); // => 'KR'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接