Клиент C# REST API Prestashop

Я мог ПОЛУЧИТЬ данные Xml из Prestashop API, но не мог PUT/POST данных Xml в PrestaShop API.

Может ли кто-нибудь подсказать, где я могу ошибаться?

public POST_xml()
{
     Uri address = new Uri("http://.../api/countries/1");
     HttpWebRequest request = WebRequest.Create("http://.../api/countries/1") as HttpWebRequest;

     NetworkCredential("15PJQ4V8CXI22JVW1TKZASDF0OAYNBLA", "");

     // Create the web request  
     request = WebRequest.Create(address) as HttpWebRequest;

     // Set type to POST  
     request.Method = "POST";
     request.ContentType = "application/x-www-form-urlencoded";

     // Create the data we want to send.  

     string context = "<prestashop><country><id>1</id><id_zone xlink:href=\"http://.../api/zones/1\">";
     context += "1</id_zone><id_currency/><iso_code>DE</iso_code><call_prefix>49</call_prefix><active>1</active><contains_states>0</contains_states><need_identification_number>0</need_identification_number><need_zip_code>1</need_zip_code><zip_code_format>NNNNN</zip_code_format><display_tax_label>1</display_tax_label><name><language";
     context += " id=\"6\" xlink:href=\"http://.../api/languages/6\">Germanyxx</language></name></country></prestashop>";


     StringBuilder data = new StringBuilder();
     data.Append("&context=" + HttpUtility.UrlEncode(context));


     // Create a byte array of the data we want to send  
     byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());

     // Set the content length in the request headers  
     request.ContentLength = byteData.Length;

     // Write data  
     using (Stream postStream = request.GetRequestStream())
     {
         postStream.Write(byteData, 0, byteData.Length);
     }
}

person kiyan r.z.h    schedule 07.02.2012    source источник


Ответы (3)


Я не экспортирую в С#, но я заставил вызов REST работать как в Java, так и в VBA. В вашем коде мало что не так. Я предполагаю, что вы хотели бы создать запись о новой стране. Тогда ваш URL-адрес должен быть

Uri address = new Uri("http://.../api/countries/");

И в вашем строковом контексте вы не можете установить идентификатор для нового ресурса.

То, что вы здесь показываете, в значительной степени сработает для запроса PUT на ресурс «countries/1».

person Jean-Luc Johnson    schedule 08.09.2012

  1. API веб-сервиса PrestaShop ожидает, что XML будет иметь префикс xml= для запросов POST.
  2. Используйте программу под названием Fiddler — прокси-сервер отладки HTTP, чтобы точно видеть, что вы отправляете и что отвечает веб-служба.
person Frank Reeves    schedule 05.03.2012

  1. Если вы хотите обновить страну с идентификатором = 1, вам нужно установить тип запроса «PUT».
  2. Не нужно добавлять "&context"
  3. Если это все еще не работает. Загрузите пример кода по адресу http://doc.prestashop.com/display/PS14/Using+the+REST+webservice. Затем запустите код «update.php», посмотрите, как они делают запрос.
person Ani    schedule 13.05.2012