从API调用访问返回的XML

时间:2013-07-31 16:04:26

标签: asp.net xml asp.net-mvc

我有以下操作方法来执行API调用: -

[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());
                    }

API调用的返回XML如下所示: -

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

但是我如何能够到达消息和操作状态并根据它们显示适当的消息。我用来序列化返回的Json,但是我不知道如何为xML这样做: -

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

2 个答案:

答案 0 :(得分:1)

只需将其加载到XmlDocument

未经测试且从头顶开始:

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

答案 1 :(得分:1)

如果您使用ASP.NET mvc,我相信您可以使用HttpClient而不是WebClient:

定义结果类:

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

然后用它来进行自动灭菌:

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