如何在.NET MVC中获取用户当前的访问国家/地区位置?

时间:2018-07-10 03:13:34

标签: asp.net-mvc

我已经阅读了许多文档,但没有任何结果适合我。我已关注a link

我想通过IP地址获取当前用户的位置。但是,我的ipAddress总是显示null,然后显示::1。我不知道我在做什么错。

任何人都可以帮助我解决这个问题。

型号

   public class LocationModel
    {
        public string IP { get; set; }
        public string Country_Code { get; set; }           

    }

控制器

public class HomeController : Controller
{
    // GET: Home
    public ActionResult Index()
    {
        string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        if (string.IsNullOrEmpty(ipAddress))
        {
            ipAddress = Request.ServerVariables["REMOTE_ADDR"];
        }
        LocationModel location = new LocationModel();
        string url = string.Format("http://freegeoip.net/json/{0}", ipAddress);
        using (WebClient client = new WebClient())
        {
            string json = client.DownloadString(url);
            location = new JavaScriptSerializer().Deserialize<LocationModel>(json);
        }

        return View(location);
    }
}

查看

@model IPAddress_Location_MVC.Models.LocationModel

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
</head>
<body>
    <table cellpadding="0" cellspacing="0">
        <tr><td>IP</td><td>@Model.IP</td></tr>
        <tr><td>Country Code</td><td>@Model.Country_Code</td></tr>           
    </table>
</body>
</html>

2 个答案:

答案 0 :(得分:4)

像尼勒什指出的那样;您得到的回应是有效的。 :: 1是IPv6环回地址的缩写。这等效于IPv4 127.0.0.0或Localhost。 由于您是在本地运行并在本地连接,因此它会报告您的本地主机地址。如果您要在其他计算机上运行此代码,然后在您自己的计算机上连接该代码,则会得到返回了一个“真实” ip。

您提到的第二点是您得到“远程服务器返回错误:(403)禁止。”调用FreeGeoIP服务时,是因为不再使用该端点。 (只需浏览该URL:http://freegeoip.net/json/)即可完成操作,它返回以下消息:

  

重要-请更新您的API端点这个API端点是   已弃用,现已关闭。继续使用freegeoip   API,请更新您的集成以使用新的ipstack API   端点,设计为简单的直接替换。你将会   需要在https://ipstack.com创建一个帐户并获得一个API   访问密钥。有关如何升级的更多信息,请访问我们的   Github教程,网址为:https://github.com/apilayer/freegeoip#readme

更新

新API的格式为:

  

http://api.ipstack.com/IP_FOR_LOOKUP?access_key=YOUR_ACCESS_KEY&output=json&legacy=1

为了读取结果(Json),可以使用NewtonSoft等Json解串器。您需要在项目中引用Newtonsoft.Json包,并创建一个表示结果的POCO。然后调用Newtonsoft将Json反序列化为您的对象。例如,您可以检查their documentation

答案 1 :(得分:2)

您是否尝试过这样获取IP地址?

string ipAddress =  HttpContext.Request.UserHostAddress;

我找到了这个here