2

我在这里做错了什么?

首先,我请求获取现有订单,并更改检索到的 xml 中 current_status 字段的值。然后我使用修改后的 xml 作为参数发出 PUT 请求,但我得到如下响应:

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<errors>
<error>
<code><![CDATA[127]]></code>
<message><![CDATA[XML error : String could not be parsed as XML
XML length : 2864
Original XML : xml=%3C%3Fxml+version%3D%221%2E0%22+encoding...%3C%2Fprestashop%3E%0A]]></message>
</error>
</errors>
</prestashop>

当我调试我的代码时,在执行之前 PUT 请求中的 xml 参数没有问题。为什么'原始 XML' 会显示这样编码的 xml?我必须设置某种编码吗?我的代码在 C# 中。

4

2 回答 2

0

似乎 xml 参数必须是 RequestBody 类型。如果未指定,它会自动设置为类型 GetOrPost,这会导致“无法将字符串解析为 XML”错误。我不确定一切是如何工作的,但似乎这是解决问题的方法。

RestRequest request;
request = new RestRequest("api/orders/" + orderID, Method.GET);
IRestResponse response = client.Execute(request);

XElement orderXML = XElement.Parse(response.Content);
XElement orderEl = orderXML.Descendants().FirstOrDefault();
orderEl.Element("current_state").Value = "10";    

request = new RestRequest("api/orders", Method.PUT);
request.AddParameter("xml", orderXML.ToString(), ParameterType.RequestBody);
IRestResponse response2 = client.Execute(request);
于 2013-08-29T06:35:13.573 回答
0

您还可以使用由 C# 编写的 .Net 包装器,而不是发送和检索 XML 请求。它还允许您上传和更改使用纯 XML 和 http 请求有点棘手的图像。它被称为PrestaSharp

于 2016-07-10T11:21:25.907 回答