Como adicionar texto para solicitar corpo em RestSharp

103

Estou tentando usar RestSharp para consumir um serviço da web. Até agora tudo correu muito bem (felicidades para John Sheehan e todos os contribuidores!), Mas encontrei um obstáculo. Digamos que eu queira inserir XML no corpo do meu RestRequest em sua forma já serializada (ou seja, como uma string). Existe uma maneira fácil de fazer isso? Parece que a função .AddBody () conduz a serialização nos bastidores, então minha string está sendo transformada em <String />.

Qualquer ajuda é muito apreciada!

EDIT: Uma amostra do meu código atual foi solicitada. Ver abaixo --

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.
fonte
Qual é a aparência do seu código atual? E onde está o problema?
Oded
2
desculpe, não vi isso até agora. você provavelmente quer AddParameter () para isso. se não é isso que você quer, poste no grupo do google com um exemplo do corpo com params + xml que você está tentando alcançar. groups.google.com/group/restsharp
John Sheehan,

Respostas:

215

Veja como adicionar uma string xml simples ao corpo da solicitação:

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

dmitreyg
fonte
34
+1 Da mesma forma, para adicionar JSON simples, é req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett
49
Na verdade, para Json deveria ser (pelo menos para Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Obrigado a Jean Hominal pela dica aqui
MrWater
1
Como eu iria definir isso para apenas uma string codificada em HTML?
mike james
4
Eu acho que req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice
2
Estou usando a versão mais recente do RestSharp e essa assinatura de método não está disponível.
jrahhali
6

Para adicionar à resposta de @dmitreyg e por comentário de @jrahhali à sua resposta, na versão atual, a partir do momento em que esta é postada v105.2.3, a sintaxe é a seguinte:

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
});
nome-interessante aqui
fonte
1
Eu tentei isso, mas o que quer que eu defina no parâmetro Name é na verdade definido como content-Type. Portanto, para ContentType e Name, usei "application / json".
Thangadurai
Eu tentei fazer isso e obtive uma exceção de referência nula em rest #. Encontrou uma solução em stackoverflow.com/a/44281853/109736
JasonCoder
@JasonCoder obrigado pelo comentário. Era a mesma versão também, v105.2.3? Tive resultados mistos com versões posteriores, é a razão pela qual pergunto. Agora está em 106, que pode não funcionar da mesma forma.
nome-interessante-aqui
@GibralterTop, meus resultados foram 106.6.9
JasonCoder