2013-11-22 29 views
0

我收到一個錯誤,並且收到了關於如何編碼我的請求的API手冊。以下是我的要求..XML響應錯誤:在文檔的頂級無效

string url = "[My url to send request to]"; 

string xmlrequest = "<serv_request><head><securityContext><account>[account]</account><key>[my account key]</key></securityContext></head><body><username>[my user name]</username></body></serv_request>"; 

NameValueCollection nvc = new NameValueCollection(); 
nvc.Add("xml", Server.UrlEncode(xmlrequest)); 


WebClient client = new WebClient(); 

byte[] byteresponse = client.UploadValues(url, nvc); 

string xmlresponse = client.Encoding.GetString(byteresponse); 

我得到一個迴應的錯誤。在文檔的頂層無效。

編輯..添加從提供給我的API說明手冊..

string url = " http://[domain_name]/_gateway/api/[filename].asp"; 

// formulate the XML request here 

string xmlrequest = "<serv_request>...</serv_request>"; 

NameValueCollection nvc = new NameValueCollection(); 
nvc.Add("xml", Server.UrlEncode(xmlrequest)); 

WebClient client = new WebClient(); 
byte[] byteresponse = client.UploadValues(url, nvc); 

string xmlresponse = client.Encoding.GetString(byteresponse); 
+0

用xml標籤開始字符串? '<?xml version =「1.0」encoding =「UTF-8」?>' – marekful

+0

感謝您的回覆,當您試圖將其作爲... string xmlrequest =「<?xml version ='1.0'encoding ='UTF-8 '?>培訓 [我的鑰匙代碼] [我的用戶名]」我收到了同樣的錯誤。 –

+0

您是否曾嘗試在開始的標籤中包含XML名稱空間屬性?就像'' – X3074861X

回答

0

這聽起來像服務器沒有用正確的XML響應,可以返回一個空字符串或者任何文本不是一個結構良好的XML。

嘗試並捕獲您發送的xml,並使用像soapUI這樣的工具發送請求並查看它給您的響應。

而且也許嘗試這在代碼的最後一行的代替:

串xmlresponse = System.Text.Encoding.UTF8.GetString(byteresponse);

1

我設法解決這個問題。而不是傳遞一個字符串與其中的所有xml,並使用Server.UrlEncode我使用XmlWriter類和StringBuilder。所有你的回覆都很有幫助,而且很受歡迎,我會投票給他們,但我還不能做那個功能。也許這將在未來幫助其他人。謝謝

 XmlWriter writer; 
     StringBuilder sb = new StringBuilder(); 
     writer = XmlWriter.Create(sb); 
     writer.WriteStartElement("serv_request"); 
     writer.WriteStartElement("head"); 
     writer.WriteStartElement("securityContext"); 
     writer.WriteStartElement("account"); 
     writer.WriteString("MyAccountName"); 
     writer.WriteEndElement(); 
     writer.WriteStartElement("key"); 
     writer.WriteString("MyKey"); 
     writer.WriteEndElement(); //closes Key Element 
     writer.WriteEndElement(); // closes securityContent 
     writer.WriteEndElement(); //closes head 
     writer.WriteStartElement("body"); 
     writer.WriteStartElement("username"); 
     writer.WriteString("MyUserName"); 
     writer.WriteEndElement(); // closes username 
     writer.WriteEndElement(); //closes body 
     writer.WriteEndElement(); //closes serv_request 
     writer.Close(); 

     NameValueCollection nvc = new NameValueCollection();   
     nvc.Add("xml", sb.ToString());   

     WebClient client = new WebClient(); 
     byte[] byteresponse = client.UploadValues(url, nvc); 

     string xmlresponse = client.Encoding.GetString(byteresponse); 
+0

我也在使用inquisiq api,並且此方法對我也有效!感謝您的幫助。你有沒有找到更好的方法來做到這一點呢? – aclave1