Я пытаюсь отредактировать продукт, используя API prestashop, используя RestSharp в С#, используя XML. Инструкции документации следующие:
To edit an existing resource: GET the full XML file for the resource you want to change (/api/customers/7), edit its content as needed, then PUT the whole XML file back to the same URL again.
Я пытаюсь отредактировать /customers/1.
Мои вызовы GET работают нормально для получения данных. Сейчас я десериализую данные, редактирую их по мере необходимости и повторно сохраняю в файл XML. Кажется, все идет хорошо. Единственные поля, которые я пытаюсь изменить прямо сейчас, это имя и фамилия. Остальные данные остаются нетронутыми. Вот копия XML, который я использую:
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<customer>
<id><![CDATA[1]]></id>
<id_default_group xlink:href="http://heatherfazelinia.com/api/groups/3"><![CDATA[3]]></id_default_group>
<id_lang xlink:href="http://heatherfazelinia.com/api/languages/1"><![CDATA[1]]></id_lang>
<newsletter_date_add><![CDATA[2013-12-13 08:19:15]]></newsletter_date_add>
<ip_registration_newsletter></ip_registration_newsletter>
<last_passwd_gen><![CDATA[2014-06-20 16:56:30]]></last_passwd_gen>
<secure_key><![CDATA[6a9b9eab95448d74a026b869d8cd723e]]></secure_key>
<deleted><![CDATA[0]]></deleted>
<passwd><![CDATA[6028853eb1033578f7432015042fa486]]></passwd>
<lastname>newLastName</lastname>
<firstname>newFirstName</firstname>
<email><![CDATA[[email protected]]]></email>
<id_gender><![CDATA[1]]></id_gender>
<birthday><![CDATA[1970-01-15]]></birthday>
<newsletter><![CDATA[1]]></newsletter>
<optin><![CDATA[1]]></optin>
<website></website>
<company></company>
<siret></siret>
<ape></ape>
<outstanding_allow_amount><![CDATA[0.000000]]></outstanding_allow_amount>
<show_public_prices><![CDATA[0]]></show_public_prices>
<id_risk><![CDATA[0]]></id_risk>
<max_payment_days><![CDATA[0]]></max_payment_days>
<active><![CDATA[1]]></active>
<note></note>
<is_guest><![CDATA[0]]></is_guest>
<id_shop><![CDATA[1]]></id_shop>
<id_shop_group><![CDATA[1]]></id_shop_group>
<date_add><![CDATA[2014-08-01 13:20:37]]></date_add>
<date_upd><![CDATA[2014-08-01 13:20:37]]></date_upd>
<associations>
<groups node_type="groups">
<groups xlink:href="http://heatherfazelinia.com/api/groups/3">
<id><![CDATA[3]]></id>
</groups>
</groups>
</associations>
</customer>
</prestashop>
Этот файл сохраняется как EditedXML.xml. Опять же, согласно документации (которую я вставил выше), для редактирования ресурса я должен использовать PUT, чтобы поместить XML обратно на тот же URL-адрес (то есть /customers/1). Поэтому я использую следующий код прямо перед созданием этой темы, чтобы попытаться сделать именно это:
// PUT call
var putRequest = new RestRequest("/customers/1", Method.PUT);
var body = System.IO.File.ReadAllText("EditedXML.xml");
request.AddBody(body);
IRestResponse putResponse = client.Execute(putRequest);
Console.WriteLine("Response: " + putResponse.Content);
Теперь приходит моя проблема. Я получаю сообщение об ошибке (первоначально в формате HTML, я открыл его как HTML, чтобы опубликовать его более читаемым :)
Method Not Implemented
GET to /api/customers/1 not supported.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Эту ошибку я нахожу ОЧЕНЬ запутанной по двум причинам:
1) Кажется, что хотя мой запрос и является Method.PUT, он читается как GET?
2) То, что он утверждает, даже не соответствует действительности? Мне нужно вызвать функцию GET для того же ресурса, чтобы получить исходные данные?
На всякий случай, если кто-то хотел бы увидеть вызов GET, вот он:
request = new RestRequest(Method.GET);
request.Resource = "/customers/1";
IRestResponse<customer> newResponse = client.Execute<customer>(request);
Кто-нибудь знает, что происходит? Я не уверен, как это отладить, я не уверен, что вызов PUT вообще работает, или аргументы с моим вызовом PUT неверны, или что...