以编程方式将xml数据发送到资源并序列化结果

本文关键字:资源 序列化 结果 方式 编程 xml 数据 | 更新日期: 2023-09-27 18:02:05

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

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

然后,我应该收到一个xml格式的响应。

已经有一段时间了,所以我在努力寻找最好的方法来做到这一点(事实上,我可以不关心"最好",并且会满足于仅仅让事情工作)。

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

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

以编程方式将xml数据发送到资源并序列化结果

最简单的方法是使用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中可用的许多方法之一:XDocument, XmlWriter, XmlDocument(这个方法开始过时了,你可能更喜欢XDocument)或使用XmlSerializer将对象图序列化为字符串,…响应XML =>也一样,您可以使用XDocument、XmlReader、XmlDocument对其进行解析,或者使用XmlSerializer将其反序列化回对象图。

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