John John
John John

Reputation: 1

Accessing the returned XML from an API call

I have the following action method to perform an API call:-

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Rack rack, FormCollection formValues)
        {
            if (ModelState.IsValid) {

                using (var client = new WebClient())
                {
                    var query = HttpUtility.ParseQueryString(string.Empty);
                    foreach (string key in formValues)
                    {
                    query[key] = this.Request.Form[key];
                    }
                    query["username"] = "testuser";
                    query["password"] = ///.....
                    query["assetType"] = "Rack";
                    query["operation"] = "AddAsset";
                    var url = new UriBuilder("http://win-spdev:8400/servlets/AssetServlet");
                    url.Query = query.ToString();
                    try
                    {
                        string xml = client.DownloadString(url.ToString());
                    }

The return XML from the API call looks as follow:-

<operation>
<operationstatus>Failure</operationstatus>
<message>Rack already exists.Unable to add</message>
</operation>

but how i can reach the message and operationstaus and according to them to display an appropriate message . i use to serialize the returned Json such as , but i am not sure how to do so for the xML:-

var serializer = new JavaScriptSerializer();
                    var myObject = serializer.Deserialize<newprocess>(json);
                    string activityid = myObject.activityId;

Upvotes: 0

Views: 45

Answers (2)

Uriil
Uriil

Reputation: 12618

If you using ASP.NET mvc, I believe you can use HttpClient, instead of WebClient:

Define result class:

   public class operation
   {
          public string operationstatus{get;set;}
          public string message{get;set;}              
   }

And then use it for automatic deserilization:

   var client = new HttpClient();
   var result = client.PostAsync(url, 
        new FormUrlEncodedContent(new Dictionary<string, string>{
           {"username","testuser"},
           {"assetType","Rack"}}))
       .Result.Content
       .ReadAsAsync<operation>().Result;

Upvotes: 1

Krumelur
Krumelur

Reputation: 33048

Just load it into an XmlDocument.

Untested and from the top of my head:

    var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(theXML);
    var status = xmlDoc.SelectSingleNode("/operation/operationstatus").InnerText;
    var message = xmlDoc.SelectSingleNode("/operation/message").InnerText;

Upvotes: 1

Related Questions