我编写了代码,根据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 IP地址连接到调制解调器时我可以获得地理位置?
答案 0 :(得分: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地址作为字符串提供给现有代码。
您可以从here
获取HTTPGet