0

IP アドレスに基づいてユーザーの地理的位置情報を提供するコードを作成しました。しかし、その時点で PC を 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 を接続すると、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 に答える