2013-07-31 43 views
0

我有以下操作方法来执行API调用访问返回的XML: -从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; 

回答

1

只要将其加载到XmlDocument

未经测试,从我的头顶:

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

感谢您的回复。但在XmlDocument下没有名为LoadXML的方法? –

+0

@johnG这是一个实例方法。我已经更新了我的答案。另请参阅:http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.loadxml.aspx – Krumelur

1

如果您使用ASP.NET MVC,我相信你可以使用HttpClient的,而不是Web客户端:

定义结果类:

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

,然后用它自动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; 
+0

现在看起来很花哨!我必须记住! – Krumelur

+0

感谢您的回复和代码,但在我的情况下使用HttpWeb的HttpClient instad的好处是什么? –

+0

@johnG嗯,我不认为,你可以用HttpClient做什么,并且不能用WebClient做。它只是4.5中引入的新类,我认为它的语法看起来更好,更短。但这真的取决于你 – Uriil