0

我已经编写了代码,可以根据 IP 地址为我提供用户的地理位置。但是当我当时将我的电脑与 USBModem 连接时,它显示错误的位置。

string apiKey = System.Configuration.ConfigurationManager.AppSettings["ipInfoDbKey"];
string url = "http://api.ipinfodb.com/v3/ip-city/?ip={0}&key=" + apiKey;
//string url = "http://ipinfodb.com/ip_query.php?ip={0}&timezone=false";
url = String.Format(url, ip);
var result = XDocument.Load(url);
var location = (from x in result.Descendants("Response")
select new LocationInfo
{
     City = (string)x.Element("City"),
     RegionName = (string)x.Element("RegionName"),
     Country = (string)x.Element("CountryName"),
     ZipPostalCode = (string)x.Element("CountryName"),
     Position = new LatLong
     {
          Lat = (float)x.Element("Latitude"),
          Long = (float)x.Element("Longitude")
     }
}).First();
return location;

我已经围绕 IpAddress 做了一些工作。我注意到一件事,当我连接任何 USBModem 时,它需要调制解调器 IP 地址而不是我的 pc。你能告诉我当 pc 使用 PC IP 地址连接到调制解调器时如何获取地理位置吗?

4

1 回答 1

2

当您通过调制解调器连接时,您需要计算出您现有代码的外部 IP 地址才能正常工作。为什么不调用类似http://checkip.dyndns.org并解析返回字符串?

就像是:

var req = new HTTPGet();
req.Request("http://checkip.dyndns.org");
string[] resp = req.ResponseBody.Split(':');
string ip = resp[1];

这应该将您的外部 IP 地址作为字符串提供给您现有的代码。

你可以从这里获取 HTTPGet

于 2012-09-18T10:00:58.040 回答