2013-07-31 41 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