Comment ajouter du texte pour demander le corps dans RestSharp

103

J'essaie d'utiliser RestSharp pour consommer un service Web. Jusqu'à présent, tout s'est très bien passé (bravo à John Sheehan et à tous les contributeurs!) Mais je suis tombé sur un hic. Disons que je veux insérer du XML dans le corps de ma RestRequest sous sa forme déjà sérialisée (c'est-à-dire sous forme de chaîne). Y a-t-il un moyen facile de faire ceci? Il semble que la fonction .AddBody () effectue la sérialisation dans les coulisses, donc ma chaîne est en train d'être transformée en <String />.

Toute aide est grandement appréciée!

EDIT: Un échantillon de mon code actuel a été demandé. Voir ci-dessous --

private T ExecuteRequest<T>(string resource,
                            RestSharp.Method httpMethod,
                            IEnumerable<Parameter> parameters = null,
                            string body = null) where T : new()
{
    RestClient client = new RestClient(this.BaseURL);
    RestRequest req = new RestRequest(resource, httpMethod);

    // Add all parameters (and body, if applicable) to the request
    req.AddParameter("api_key", this.APIKey);
    if (parameters != null)
    {
        foreach (Parameter p in parameters) req.AddParameter(p);
    }

    if (!string.IsNullOrEmpty(body)) req.AddBody(body); // <-- ISSUE HERE

    RestResponse<T> resp = client.Execute<T>(req);
    return resp.Data;
}
Matt G.
la source
À quoi ressemble votre code actuel? Et où avez-vous le problème?
Oded le
2
désolé, je n'ai pas vu ça jusqu'à présent. vous voulez probablement AddParameter () pour cela. si ce n'est pas ce que vous voulez, postez sur le groupe Google avec un exemple du corps avec params + xml que vous essayez d'obtenir. groups.google.com/group/restsharp
John Sheehan

Réponses:

215

Voici comment ajouter une chaîne XML ordinaire au corps de la requête:

req.AddParameter("text/xml", body, ParameterType.RequestBody);

dmitreyg
la source
34
+1 De même, pour ajouter du JSON brut, c'est req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett
49
En fait, pour Json ça devrait être (au moins pour Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Merci à Jean Hominal pour le tuyau ici
MrWater
1
Comment pourrais-je régler cela sur une chaîne encodée en HTML? Ie un grand get val = 2 & val2 = 3 etc.
Mike James
4
Je penserais req.AddParameter ("application / x-www-form-urlencoded", corps, ParameterType.RequestBody);
Brian Rice
2
J'utilise la dernière version de RestSharp et cette signature de méthode n'est pas disponible.
jrahhali
6

Pour ajouter à la réponse de @ dmitreyg et par le commentaire de @ jrahhali à sa réponse, dans la version actuelle, au moment où elle est publiée v105.2.3, la syntaxe est la suivante:

request.Parameters.Add(new Parameter() { 
    ContentType = "application/json", 
    Name = "JSONPAYLOAD", // not required 
    Type = ParameterType.RequestBody, 
    Value = jsonBody
});

request.Parameters.Add(new Parameter() { 
    ContentType = "text/xml", 
    Name = "XMLPAYLOAD", // not required 
    Type = ParameterType.RequestBody, 
    Value = xmlBody
});
nom-intéressant-ici
la source
1
J'ai essayé cela, mais tout ce que j'ai défini dans le paramètre Name est en fait défini comme content-Type. Donc, pour ContentType et Name, j'ai utilisé "application / json".
Thangadurai
J'ai essayé ceci et j'ai obtenu une exception de référence nulle à partir du reste #. Solution trouvée sur stackoverflow.com/a/44281853/109736
JasonCoder
@JasonCoder merci pour le commentaire. Était-ce également la même version, la v105.2.3? J'ai eu des résultats mitigés avec les versions ultérieures est la raison pour laquelle je demande. C'est maintenant sur 106 qui peut ne pas fonctionner de la même manière.
nom-intéressant-ici
@GibralterTop mes résultats étaient avec 106.6.9
JasonCoder