我已经阅读了许多文档,但没有任何结果适合我。我已关注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>
答案 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)