我在这里做错了什么?
首先,我发出获取现有订单的请求,然后更改检索到的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#中。
答案 0 :(得分:0)
似乎xml参数必须是RequestBody类型。如果未指定,则会自动将其设置为键入GetOrPost,这会导致“String无法解析为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);
答案 1 :(得分:0)
您还可以使用C#编写的.Net包装器,而不是发送和检索XML请求。它还允许您使用纯XML和http请求上传和更改图像,这有点棘手。它被称为PrestaSharp。