Как добавить текст в тело запроса в RestSharp - PullRequest
93 голосов
/ 23 февраля 2011

Я пытаюсь использовать RestSharp для использования веб-службы.Пока все прошло очень хорошо (привет Джону Шихану и всем авторам!), Но я столкнулся с проблемой.Скажем, я хочу вставить XML в тело моего RestRequest в его уже сериализованной форме (то есть в виде строки).Есть простой способ сделать это?Похоже, что .AddBody () выполняет сериализацию за кулисами, поэтому моя строка превращается в <String />.

Любая помощь очень ценится!

РЕДАКТИРОВАТЬ: образец моего текущегоКод был запрошен.Смотри ниже -

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

Ответы [ 2 ]

194 голосов
/ 22 марта 2011

Вот как добавить обычную строку XML в тело запроса:

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

5 голосов
/ 29 июня 2017

Чтобы добавить к ответу @ dmitreyg и к комментарию @ jrahhali к его ответу, в текущей версии на момент публикации это v105.2.3, синтаксис следующий:

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