【问题标题】:how to get country by user Ip address in .Net Core?如何通过.Net Core中的用户IP地址获取国家/地区?
【发布时间】:2020-10-08 17:43:15
【问题描述】:

我想通过他的 IP 获取登录用户的国家。第一个函数获取ip地址。

 public static string GetLocalIPAddress()
 {
    var host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (var ip in host.AddressList)
    {
        if (ip.AddressFamily == AddressFamily.InterNetwork)
        {
            return ip.ToString();
        }
    }
    throw new Exception("No network adapters with an IPv4 address in the system!");
}

第二个函数获取ip并返回国家

 public static string GetUserCountryByIp(string ip)
    {
        IpInfo ipInfo = new IpInfo();
        try
        {
            string info = new WebClient().DownloadString("http://ipinfo.io/" + ip);
            ipInfo = JsonConvert.DeserializeObject<IpInfo>(info);
            RegionInfo myRI1 = new RegionInfo(ipInfo.Country);
            ipInfo.Country = myRI1.EnglishName;
        }
        catch (Exception)
        {
            ipInfo.Country = null;
        }

        return ipInfo.Country;
    }

这里的问题是第二个函数没有返回任何数据。当我在https://ipinfo.io/IP 尝试我的 IP 时,它返回 bogon=true 。

我怎样才能返回不 bogon ip。

【问题讨论】:

  • 从标签看来,您是在 ASP.NET 中运行该代码。除了您已经知道的位置之外,您希望您的服务器区域是什么?
  • 我需要返回 IP 的函数,我可以从该 IP 获取所有数据(国家、城市)
  • 你需要的是用户的IP,而不是你服务器的IP。请edit 您的问题,并删除.net-core 标记(如果您使用的是ASP.NET)或更改asp.net 标记为asp.net-core 标记(如果您使用的是ASP.NET Core)。

标签: c# asp.net-mvc algorithm .net-core asp.net-core-mvc


【解决方案1】:

如果您想获取客户端的 IP 位置,则需要使用客户端的 IP 地址而不是主机。要在 ASP.Net Core 中执行此操作,您可以:

var clientIpAddress = request.HttpContext.Connection.RemoteIpAddress;

从那里您可以使用 clientIpAddress 作为传递给您的 GetUserCountryByIp 函数的 IP。

【讨论】:

  • Request的命名空间是什么?
  • 它返回 {::1} 这是什么??!!
  • 因为是本地尝试,所以 ::1 是 localhost
  • 部署站点并进行测试
猜你喜欢
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2013-10-24
  • 2013-09-15
  • 1970-01-01
相关资源
最近更新 更多