【问题标题】:Geolocation error with IP address 127.0.0.1IP 地址为 127.0.0.1 的地理定位错误
【发布时间】:2010-09-11 08:09:25
【问题描述】:

好的,所以我尝试实现这个,http://ipaddressextensions.codeplex.com/

将输出显示为:-

127.0.0.1 保留 ZZ

这个“RESERVED”和“ZZ”到底是什么?它应该显示为“印度”。

IP 地址是本地主机的。好的,但是国家名称和国家代码呢?为什么它们不能正确显示?我需要对我的代码进行哪些更改?

【问题讨论】:

标签: c# asp.net geolocation


【解决方案1】:

127.0.0.1 是保留的 IP 地址,代表 localhost(运行代码的计算机)。这是每台运行 TCP/IP 的计算机的“有效”IP 地址。

IP 查找需要一个真实的 IP 地址才能正常工作。

关于国家代码 - 它可能是 2 个字符的国家 ISO 代码(请参阅 here),因此您需要将代码翻译成正确的国家/地区。 ZZ 不在表格中,表示没有国家/地区。

【讨论】:

  • 如何以我想要的方式显示国家名称?我知道它是本地主机的 IP 地址,因为我正在运行我的网站。在本地主机上运行它也不会显示国家/地区名称??
  • @happysoul - 您需要在 2 个字符的 ISO 国家代码表中查找它。请参阅我的更新答案。
  • err..什么表?我只是从该网站上删除了 IPAddress Extension dll 文件并将其包含在我的项目中..该网站上没有数据库可以 d/l ..sry 但我对这一切都很陌生,所以不知道这一切是怎么回事工作..请帮助..thnx
  • @happysoul - 你看过我链接的页面了吗?它列出了 2 个字符代码及其所属的国家/地区。您可以在应用程序中使用它来将代码转换为国家/地区名称。
  • @happysoul - 可能是ipAddress.Country();。但是,您需要使用 127.0.0.1 以外的 IP 地址才能使其正常工作。
【解决方案2】:

127.0.0.1 被称为环回地址,是您的系统用来有效地与自己对话的地址。因此,没有与该 IP 地址相关联的国家/地区......它在每个系统上无处不在。

如果您将代码发布到网络上,您会得到更合适的结果,因为每个访问系统都将使用公共 IP 地址来访问您的服务器。

【讨论】:

  • 哦好吧..你能看看代码并告诉我它是否会显示国家名称好吗?我的意思是代码正确吗?谢谢
  • 您需要使用Request.UserHostAddress 获取用户主机(请求页面的系统)的IP 地址,这可能会有所帮助。否则代码是正确的,我相信 IPAddressExtensions 包含您需要的所有数据。
  • REMOTE_ADDR 呢?也不应该用吗??顺便说一句“HTTP_X_FORWARDED_FOR”什么都不返回..不知道为什么
  • 所以我假设 IPAddressExtensions 正在使用一些数据库,我不需要自己创建任何表..是这样吗?
  • @Peter Mortensen:谢谢,你本来可以编辑的,我不会介意 :)
【解决方案3】:

当您在家进行测试时,服务器和用户是一体的(您的 PC)。所以你不能指望它显示国家,因为 IIS 的 IP 地址是一个自己的地址。

您的代码似乎没问题。您也可以使用免费的 ASP.NET 支持主机在线试用您的网站。像HelioHost0000free等的还有很多。

关于您问题的编辑部分,如果您为每个国家/地区使用不同版本的网站,那么最好使用开关。

switch(iso3166TwoLetterCode.ToUpper())
{
    case "IN" : Response.Redirect("www.mysite.in");
    case "FR" : Response.Redirect("www.mysite.fr");
    ...
    Default : Response.Redirect("www.mysite.in");
}

我认为它确实看起来更整洁。

【讨论】:

  • thnx 回答..我会试试开关盒..哦,我刚想到一个问题..在开关盒中,如果我需要同时检查“IN”和“in”怎么办即两种情况..我该怎么做?我是否需要编写两个单独的案例,或者可以通过使用 OR 等使用一个来完成??
  • 您只能将 or 运算符用于布尔类型变量而不是字符串。我建议使用 toupper 或 tolow .... 请参阅上面的编辑。
  • 像这样 ?... if(iso3166TwoLetterCode.ToUpper()) {} .. 它会做什么?检查它是否大写?那么小写字母是什么? sry 不知道如何实施
  • 当您使用 toUpper() 时,请确保即使它是“in”,它也会被转换为“IN”。这样您就可以使用单个案例检查“in”和“IN”。
  • 是的,知道了..刚刚从互联网上研究了它..thnx :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2014-08-19
相关资源
最近更新 更多