Come aggiungere testo al corpo della richiesta in RestSharp


103

Sto cercando di utilizzare RestSharp per utilizzare un servizio web. Finora è andato tutto molto bene (saluti a John Sheehan ea tutti i collaboratori!) Ma mi sono imbattuto in un intoppo. Diciamo che voglio inserire XML nel corpo della mia RestRequest nella sua forma già serializzata (cioè, come una stringa). C'è un modo semplice per farlo? Sembra che la funzione .AddBody () conduca la serializzazione dietro le quinte, quindi la mia stringa viene trasformata in <String />.

Qualsiasi aiuto è molto apprezzato!

EDIT: è stato richiesto un campione del mio codice corrente. Vedi sotto --

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;
}

Che aspetto ha il tuo codice attuale? E dove hai il problema?
Oded

2
scusa, non l'ho visto fino ad ora. probabilmente vuoi AddParameter () per quello. se non è quello che vuoi, pubblica nel gruppo google con un esempio del corpo con params + xml che stai cercando di ottenere. groups.google.com/group/restsharp
John Sheehan

Risposte:


215

Ecco come aggiungere una semplice stringa xml al corpo della richiesta:

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


34
+1 Allo stesso modo, per aggiungere un semplice JSON, è req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett

49
In realtà, per Json dovrebbe essere (almeno per Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Grazie a Jean Hominal per il suggerimento qui
MrWater

1
Come dovrei fare per impostarlo su una stringa codificata HTML? Vale a dire un grande get val = 2 & val2 = 3 ecc.
Mike James,

4
Penso che req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice

2
Sto usando l'ultima versione di RestSharp e questa firma del metodo non è disponibile.
jrahhali

6

Per aggiungere alla risposta di @ dmitreyg e al commento di @ jrahhali alla sua risposta, nella versione corrente, a partire dal momento in cui viene pubblicato v105.2.3, la sintassi è la seguente:

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
});

1
Ho provato questo, ma quello che ho impostato nel parametro Name è effettivamente impostato come tipo di contenuto. Quindi sia per ContentType che per Name, ho usato "application / json".
Thangadurai,

Ho provato questo e ho ottenuto un'eccezione di riferimento nullo da rest #. Trovato una soluzione a stackoverflow.com/a/44281853/109736
JasonCoder

@JasonCoder grazie per il commento. Era anche la stessa versione, v105.2.3? Ho avuto risultati contrastanti con le versioni successive è il motivo per cui lo chiedo. Ora è il 106 che potrebbe non funzionare allo stesso modo.
nome-interessante-qui

@GibralterTop i miei risultati sono stati con 106.6.9
JasonCoder
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.