Как добавить текст в тело запроса в RestSharp


103

Я пытаюсь использовать 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;
}

Как выглядит ваш текущий код? И где в этом проблема?
Oded

2
извините, не видел этого до сих пор. для этого вам, вероятно, понадобится AddParameter (). если это не то, что вы хотите, отправьте сообщение в группу Google с примером тела с params + xml, которого вы пытаетесь достичь. groups.google.com/group/restsharp
Джон Шихан,

Ответы:


215

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

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


34
+1 Аналогичным образом, чтобы добавить простой JSON, требуется его req.AddParameter ("текст / json", body, ParameterType.RequestBody);
Пол Преветт 01

49
На самом деле, для Json это должно быть (по крайней мере, для Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Спасибо Jean Hominal за подсказку здесь
MrWater

1
Как я могу установить это только для строки в кодировке HTML? Т.е. большое значение get val = 2 & val2 = 3 и т. Д.
Майк Джеймс

4
Я бы подумал, что req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Брайан Райс

2
Я использую последнюю версию RestSharp, и эта подпись метода недоступна.
jrahhali 02

6

Чтобы добавить в ответ @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
});

1
Я пробовал это, но все, что я установил в параметре Name, на самом деле устанавливается как content-Type. Итак, для ContentType и Name я использовал «application / json».
Thangadurai

Я попробовал это и получил исключение нулевой ссылки из rest #. Нашел решение на stackoverflow.com/a/44281853/109736
JasonCoder

@JasonCoder спасибо за комментарий. Была ли это та же версия, v105.2.3? У меня были смешанные результаты с более поздними версиями, поэтому я спрашиваю. Сейчас он на 106, который может работать иначе.
интересно-имя-здесь

@GibralterTop мои результаты были с 106.6.9
JasonCoder
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.