【问题标题】:XML response error: Invalid at the top level of the documentXML 响应错误:在文档的顶层无效
【发布时间】:2017-11-24 18:35:19
【问题描述】:

我收到一条错误消息,并按照我收到的关于如何对我的请求进行编码的 API 手册进行操作。以下是我的要求..

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); 

【问题讨论】:

  • 以xml标签开始字符串? &lt;?xml version="1.0" encoding="UTF-8" ?&gt;
  • 感谢您的回复,尝试此操作时... string xmlrequest = "training[我的密钥代码][我的用户名]" 我遇到了同样的错误。
  • 您是否尝试过在开头的&lt;serv_request&gt; 标记中包含XML 命名空间属性?类似&lt;serv_request xmlns="{YourXMLNamepsace}"&gt;
  • 是的,我刚刚尝试了该解决方案并得到了相同的响应。以下是我请求的服务的 API 手册中的海峡...... string url = " http://[domain_name]/_gateway/api/[filename].asp"; // 在这里制定 XML 请求 string xmlrequest = "..."; NameValueCollection nvc = new NameValueCollection(); nvc.Add("xml", Server.UrlEncode(xmlrequest)); WebClient 客户端 = 新 WebClient(); byte[] byteresponse = client.UploadValues(url, nvc);字符串 xmlresponse = client.Encoding.GetString(byteresponse);
  • 如果您与网络服务通信或制作网络服务,我建议您查看ServiceStack

标签: c# xml namevaluecollection


【解决方案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);

【讨论】:

  • 我也在使用 inquisiq api,这个方法也对我有用!谢谢您的帮助。您找到更好的方法了吗?
【解决方案2】:

听起来服务器没有以正确的 xml 响应,它可能返回一个空字符串或任何不是格式良好的 XML 的文本。

尝试捕获您正在发送的 xml,并使用诸如 soapUI 之类的工具来发送请求并查看它给您的响应。

也可以试试这个来代替你的最后一行代码:

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

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多