2017-02-23 1 views
0

J'ai un problème avec la demande de publication avec RestSharp. J'ai 2 classes:RestSharp - problème avec la demande de publication (opération échouée)

public class UnitToPost 
     { 
      public bool floating_point { get; set; } 
      public Dictionary<string, TranslationUnitToPost> translations { get; set; } 
     } 

     public class TranslationUnitToPost 
     { 
      public string name { get; set; } 
     } 

Et je veux l'envoyer à la demande de poste:

 client = new RestClient(adresApi); 

     client.AddDefaultHeader("Authorization", "Bearer " + key);   

     IRestRequest updateProduct = new RestRequest("units", Method.POST); 

     ShoperModel.UnitToPost unitToPost = new ShoperModel.UnitToPost(); 
     unitToPost.floating_point = true; 
     ShoperModel.TranslationUnitToPost transUnit = new ShoperModel.TranslationUnitToPost(); 
     transUnit.name = "namename"; 
     unitToPost.translations = new Dictionary<string, ShoperModel.TranslationUnitToPost>(); 
     unitToPost.translations.Add("pl_PL", transUnit); 


     updateProduct.RequestFormat = RestSharp.DataFormat.Json; 
     updateProduct.AddBody(unitToPost); 

     IRestResponse updateProductResponse = this.client.Execute(updateProduct); 

Et je reçois toujours une erreur:

[RestSharp.RestResponse] = "StatusCode: InternalServerError, Content-Type: application/json, Content-Length: -1)"

Content = "{\"error\":\"server_error\",\"error_description\":\"Operation Failed\"}"

Quelle est la cause? Serait-ce à cause de Dictionary dans ma classe?

Répondre

0

J'ai exécuté votre code et il émet une requête avec un corps JSON valide.

POST http://..../units HTTP/1.1

Accept: application/json,application/xml, text/json, text/x-json, text/javascript, text/xml Authorization: Bearer a

User-Agent: RestSharp/105.2.3.0

Content-Type: application/json

Host: .....

Content-Length: 84

Accept-Encoding: gzip, deflate

Connection: Keep-Alive

{"floating_point":true,"translations":[{"Key":"pl_PL","Value":{"name":"namename"}}]}

Il semble que le problème soit lié au serveur de réception. Si vous ne le faites pas déjà, je vous suggère d'exécuter Fiddler (http://www.telerik.com/fiddler) et d'inspecter la demande/réponse.

... Modifier

Je ne viens de réaliser que vous voulez que le corps JSON être: - { "floating_point": true, "traductions": { "pl_PL": { "name": "namename" }}}

J'ai trouvé un problème de RestSharp qui couvre ceci: - https://github.com/restsharp/RestSharp/issues/696

cela inclut un poste où quelqu'un a utilisé un ExpandoObject pour obtenir le résultat nécessaire.

http://theburningmonk.com/2011/05/idictionarystring-object-to-expandoobject-extension-method/

Cependant, je l'ai trouvé plus facile à utiliser JSON .NET pour serialise et définir le corps avec le code suivant: -

updateProduct.AddBody(JsonConvert.SerializeObject(unitToPost));