【问题标题】:Programatically post xml data to a resource and serialize the result以编程方式将 xml 数据发布到资源并序列化结果
【发布时间】:2011-10-03 19:58:01
【问题描述】:

我正在尝试使用来自第 3 方提供商的相对较新的 API。基本用法是 POST 查询,格式为 xml。所以,理论上,POST uri 应该是这样的:

http://provideraddress.com/?xml=myxml

反过来,我应该会收到一个 xml 格式的响应。

已经有一段时间了,所以我一直在努力寻找最好的方法来做到这一点(事实上,我不太关心“最好”,而是满足于让事情正常工作)。

到目前为止,我已经尝试使用 WebClient 以及 WebRequest。在手动将 xml 数据构建为字符串之后,最新尝试使用后者。我尝试将“xml”参数附加到 uri,并将其写入 StreamWriter。首先,我得到某种 WebResponse 对象,但内容长度始终为 -1,并且内容类型报告为 text/html,这两者似乎都不合适。其次,我不确定如何解析 WebResponse 或将其内容序列化到我的对象图中。

我已经用谷歌搜索了很多,但这些示例不稳定或已过时。我不想处理文件系统写入。理想情况下,我能够填充自己的请求对象图,将其序列化为 xml,发送 POST,然后接收可以序列化回响应对象图的内容。

任何帮助将不胜感激。

【问题讨论】:

  • 仅供参考,我没有要求任何人为我工作,我只是在寻找可靠的资源。

标签: c# xml asp.net-mvc http-post


【解决方案1】:

最简单的方法是使用 WebClient:

class Program
{
    static void Main()
    {
        using (var client = new WebClient())
        {
            client.Headers[HttpRequestHeader.ContentType] = "text/xml";
            string xml = @"<foo><bar>baz</bar></foo>";
            string url = "http://provideraddress.com/?xml=myxml";
            string response = client.UploadString(url, xml);
            Console.WriteLine(response);
        }
    }
}

现在就生成请求字符串而言,您可以使用 .NET 中可用的众多方法之一:XDocumentXmlWriterXmlDocument(这个方法开始变老了,您可能更喜欢 XDocument相反)或使用XmlSerializer 将对象图序列化为字符串,...对于响应 XML => 您可以使用 XDocument、XmlReader、XmlDocument 对其进行解析或使用 XmlSerializer 将其反序列化回对象图。

现在,如果服务器使用内容类型 text/html 进行响应并且没有返回任何响应,这可能是因为您发布的 XML 不是服务器预期的格式,您没有提供服务器预期的一些 HTTP 请求标头,服务器在处理您的请求时遇到了一些错误,... 阅读第 3 方 API 的文档并确保您尊重其格式。有些 API 可能需要先进行身份验证。因此,您需要使用用户名和密码向某个 url 发送请求,如果身份验证成功,服务器会向您发送一个令牌或 cookie,您应该在所有后续请求中发送该令牌或 cookie。

【讨论】:

  • 谢谢达林。我试过那个方法。我开始认为我试图命中的资源有问题。我已经联系了他们的支持小组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 2018-11-13
  • 2020-12-15
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多