Cómo agregar texto al cuerpo de la solicitud en RestSharp

103

Estoy intentando usar RestSharp para consumir un servicio web. Hasta ahora todo ha ido muy bien (¡salud a John Sheehan y a todos los colaboradores!) Pero me he encontrado con un problema. Digamos que quiero insertar XML en el cuerpo de mi RestRequest en su forma ya serializada (es decir, como una cadena). ¿Hay una forma fácil de hacer esto? Parece que la función .AddBody () realiza la serialización detrás de escena, por lo que mi cadena se está convirtiendo en <String />.

¡Cualquier ayuda es muy apreciada!

EDITAR: Se solicitó una muestra de mi código actual. Vea abajo --

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.
fuente
¿Cómo es tu código actual? ¿Y dónde tienes el problema?
Oded
2
lo siento, no vi esto hasta ahora. probablemente quieras AddParameter () para eso. si eso no es lo que desea, publique en el grupo de Google con un ejemplo del cuerpo con params + xml que está tratando de lograr. groups.google.com/group/restsharp
John Sheehan

Respuestas:

215

A continuación, se explica cómo agregar una cadena xml simple al cuerpo de la solicitud:

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

dmitreyg
fuente
34
+1 De la misma forma, para agregar JSON simple, es req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett
49
En realidad, para Json debería ser (al menos para Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Gracias a Jean Hominal por el consejo aquí
MrWater
1
¿Cómo haría para configurar esto en solo una cadena codificada en HTML? Es decir, un gran get val = 2 & val2 = 3, etc.
Mike James
4
Creo que req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice
2
Estoy usando la última versión de RestSharp y esta firma de método no está disponible.
jrahhali
6

Para agregar a la respuesta de @ dmitreyg y según el comentario de @ jrahhali a su respuesta, en la versión actual, a partir del momento en que se publicó v105.2.3, la sintaxis es la siguiente:

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
});
nombre-interesante-aqui
fuente
1
Intenté esto, pero lo que configuré en el parámetro Nombre en realidad se establece como tipo de contenido. Entonces, para ContentType y Name, utilicé "application / json".
Thangadurai
Intenté esto y obtuve una excepción de referencia nula desde el resto #. Encontré una solución en stackoverflow.com/a/44281853/109736
JasonCoder
@JasonCoder gracias por el comentario. ¿Era también la misma versión, v105.2.3? He tenido resultados mixtos con versiones posteriores es la razón por la que pregunto. Ahora está en 106, que puede no funcionar igual.
nombre-interesante-aquí
@GibralterTop mis resultados fueron con 106.6.9
JasonCoder