Restsharp: Impossible de POSTer du JSON brut

Créé le 17 juin 2015  ·  3Commentaires  ·  Source: restsharp/RestSharp

Je suis nouveau sur RESTSharp - et relativement nouveau sur REST en général. J'ai testé cet appel de service dans Postman et cela fonctionne bien avec cette même entrée, mais uniquement lorsque la chaîne json est transmise en tant que texte brut.

Le service renvoie une erreur interne du serveur : "Paramètre attendu "Politique" non transmis".

            string postData = @"{""Policy"":{""PolicyId"": 123456, ""Holder"": ""TestHolder Name"", ""HolderAddress"": {  ""Line1"": ""Address1"",  ""Line2"": ""address2"", ""City"": ""MyCity"", ""State"": ""ME"", ""Zip"": ""04079""}}}";

            var client = new RestClient(DecisionsSettings.DecisionsURL);
            client.AddDefaultHeader("Content-Type", "application/json");

            var request = new RestRequest("/decisions/Primary/?RuleId=" + _RuleId + "&Action=api&outputtype=JSON", Method.POST);

            request.AddParameter("userid", DecisionsSettings.DecisionsUsername);
            request.AddParameter("password", DecisionsSettings.DecisionsPassword);
            request.RequestFormat = DataFormat.Json;

           // request.AddBody(postData);//this did not work
            request.AddParameter("application/json; charset=utf-8", postData, ParameterType.RequestBody);



            var response = client.Execute(request);
            responseString = response.Content;

Commentaire le plus utile

@hallem Utiliser AddJsonBody ne fonctionnera pas, car il attend un objet json. À l'heure actuelle, il n'y a aucun moyen de transmettre une chaîne json brute (AddBody et la définition du contenu sur Json ne fonctionne pas). La solution de contournement consiste à obtenir la chaîne brute, à la désérialiser en un objet json, puis à la transmettre à Restsharp AddJsonBody. Certainement une solution de contournement inutile puisque Restsharp se re-sérialisait dans une chaîne avec laquelle nous devions commencer.

EDIT : Après avoir comparé le code pour AddJsonBody() vs AddBody(), voici la solution de contournement qui peut être utilisée pour ajouter du JSON brut à un corps de requête :

request.AddParameter("application/json", rawJson, ParameterType.RequestBody);

Tous les 3 commentaires

Utilisez plutôt request.AddJsonBody.

J'ai essayé cela - il le désérialise même s'il est déjà désérialisé.
J'ai trouvé la solution. J'ai dû utiliser content-type = "text/plain" pour envoyer du texte brut. Le fait que le texte ait été formaté en json n'a apparemment pas d'importance.

@hallem Utiliser AddJsonBody ne fonctionnera pas, car il attend un objet json. À l'heure actuelle, il n'y a aucun moyen de transmettre une chaîne json brute (AddBody et la définition du contenu sur Json ne fonctionne pas). La solution de contournement consiste à obtenir la chaîne brute, à la désérialiser en un objet json, puis à la transmettre à Restsharp AddJsonBody. Certainement une solution de contournement inutile puisque Restsharp se re-sérialisait dans une chaîne avec laquelle nous devions commencer.

EDIT : Après avoir comparé le code pour AddJsonBody() vs AddBody(), voici la solution de contournement qui peut être utilisée pour ajouter du JSON brut à un corps de requête :

request.AddParameter("application/json", rawJson, ParameterType.RequestBody);

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

stricq picture stricq  ·  6Commentaires

vDeggial picture vDeggial  ·  6Commentaires

AlexanderSchoenfeld picture AlexanderSchoenfeld  ·  3Commentaires

weswitt picture weswitt  ·  3Commentaires

qJake picture qJake  ·  7Commentaires