2013-05-27 14 views
16

Sto costruendo un client API RESTful in C# .NET 3.5.Come accedere al corpo della richiesta HTTP usando RestSharp?

ho iniziato la costruzione con il buon vecchio HttpWebClient (e HttpWebResponse), ho potuto fare quello che volevo con. Ero felice L'unica cosa su cui sono rimasto bloccato è stata la deserializzazione automatica dalla risposta JSON.

Quindi, ho sentito parlare di una meravigliosa libreria denominata RestSharp (104.1) che facilita lo sviluppo di client API RESTful e deserializza automaticamente le risposte JSON e XML. Ho cambiato tutto il mio codice su di esso, ma ora mi rendo conto che non posso fare cose che potrei fare con HttpWebClient e HttpWebResponse, come accedere e modificare il corpo della richiesta non elaborata.

Chiunque ha una soluzione?

Modifica: so come impostare il corpo della richiesta (con request.AddBody()), il mio problema è che voglio ottenere questa stringa del corpo della richiesta, modificarla e reimpostarla nella richiesta (aggiornando il corpo della richiesta su al volo)

risposta

34

Il corpo della richiesta è un tipo di parametro. Per aggiungere uno, si può fare uno di questi ...

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

Per recuperare il parametro del corpo è possibile cercare gli elementi della collezione req.Parameters dove il Type è uguale a ParameterType.RequestBody.

Vedere codice per la classe RestRequesthere.

Ecco ciò che il RestSharp docs on ParameterType.RequestBody ha da dire:

Se questo parametro è impostato, il suo valore verrà inviato come corpo della richiesta . Il nome del parametro viene ignorato, e così sono ulteriori parametri RequestBody - solo 1 è accettato.

RequestBody funziona solo su richieste POST o PUT, in quanto solo loro effettivamente inviano un corpo.

Se si dispone anche dei parametri GetOrPost, sovrascrivono il RequestBody - RestSharp non li combina ma sostituirà invece il parametro RequestBody con .

Per la lettura/aggiornamento del parametro di corpo on-the-fly, si può provare:

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

O, in mancanza, creare una nuova copia dell'oggetto RestRequest con un corpo diverso.

+1

Eccellente, grazie! C'è il codice completo funzionante: http://pastebin.com/0c4bqPNW – Epoc

Problemi correlati