Consuming a REST XML web service

前端 未结 4 805
终归单人心
终归单人心 2020-12-13 16:11

I\'m trying to consume the following web service http://ipinfodb.com/ip_location_api.php this web service returns an xml response, the code below gets the XML response, but

4条回答
  •  遥遥无期
    2020-12-13 16:51

    I use the this same API, I load the response XML into an XDocument and parse e.g.

    // build URL up at runtime
    string apiKey = ConfigurationManager.AppSettings["geoApiKey"];
    string url = String.Format(ConfigurationManager.AppSettings["geoApiUrl"], apiKey, ip);
    
    WebRequest request = WebRequest.Create(url);
    try
    {
        WebResponse response = request.GetResponse();
        using (var sr = new System.IO.StreamReader(response.GetResponseStream()))
        {
            XDocument xmlDoc = new XDocument();
            try
            {
                xmlDoc = XDocument.Parse(sr.ReadToEnd());
                string status = xmlDoc.Root.Element("Status").Value;
                Console.WriteLine("Response status: {0}", status);
                if (status == "OK")
                { 
                    // if the status is OK it's normally safe to assume the required elements
                    // are there. However, if you want to be safe you can always check the element
                    // exists before retrieving the value
                    Console.WriteLine(xmlDoc.Root.Element("CountryCode").Value);
                    Console.WriteLine(xmlDoc.Root.Element("CountryName").Value);
                    ...
                }                
            }
            catch (Exception)
            {
                // handle if necessary
            }   
        }
    }
    catch (WebException)
    {
        // handle if necessary    
    }
    

    What you should also do is introduce a custom class e.g. GeoLocationInfo and wrap your code in a function e.g. GetGeoLocation(string ip) then instead of writing the info to the console window you can populate & return an instance of that class.

提交回复
热议问题