web-dev-qa-db-fra.com

Comment accéder au corps de la requête HTTP à l'aide de RestSharp?

Je crée un client API RESTful dans C # .NET 3.5.

J'ai commencé à le construire avec le bon vieux HttpWebClient (et HttpWebResponse), je pouvais faire ce que je voulais. J'étais content. La seule chose sur laquelle j'étais coincé était la désérialisation automatique de la réponse JSON.

J'ai donc entendu parler d'une merveilleuse bibliothèque appelée RestSharp (104.1) qui facilite le développement de clients API RESTful et désérialise automatiquement les réponses JSON et XML. J'ai changé tout mon code dessus, mais maintenant je me rends compte que je ne peux pas faire ce que je pourrais faire avec HttpWebClient et HttpWebResponse, comme accéder et éditer le corps brut de la requête.

Quelqu'un a une solution?

Modifier: je sais comment définir le corps de la demande (avec request.AddBody()), mon problème est que je veux obtenir cette chaîne de corps de demande, la modifier et la réinitialiser dans la demande ( mise à jour du corps de la demande à la volée)

22
Epoc

Le corps de la demande est un type de paramètre. Pour en ajouter un, vous pouvez en faire un ...

req.AddBody(body);
req.AddBody(body, xmlNamespace);
req.AddParameter("text/xml", body, ParameterType.RequestBody);
req.AddParameter("application/json", body, ParameterType.RequestBody);

Pour récupérer le paramètre body, vous pouvez rechercher des éléments dans le req.Parameters collection où Type est égal à ParameterType.RequestBody.

Voir le code de la classe RestRequestici .

Voici ce que les documents RestSharp sur ParameterType.RequestBody doit dire:

Si ce paramètre est défini, sa valeur sera envoyée en tant que corps de la demande. Le nom du paramètre est ignoré, tout comme les paramètres RequestBody supplémentaires - seul 1 est accepté.

RequestBody ne fonctionne que sur POST ou PUT Requests, car seuls ils envoient réellement un corps.

Si vous avez également des paramètres GetOrPost, ils écraseront le RequestBody - RestSharp ne les combinera pas mais il jettera le paramètre RequestBody à la place.

Pour lire/mettre à jour le paramètre de corps à la volée, vous pouvez essayer:

var body = req.Parameters.FirstOrDefault(p => p.Type == ParameterType.RequestBody);
if (body != null)
{
    Console.WriteLine("CurrentBody={0}", body.Value);
    body.Value = "NewBodyValue";
}

Ou à défaut, créez une nouvelle copie de l'objet RestRequest avec un corps différent.

50
davmos