Як додати текст до запиту в 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;
}

Як виглядає ваш поточний код? І де в цьому у вас проблема?
Одід

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

Відповіді:


215

Ось як додати просту рядок xml до тіла запиту:

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


34
+1 Так само, щоб додати звичайний JSON, це req.AddParameter ("text / json", body, ParameterType.RequestBody);
Пол Превітт

49
На насправді, для Json вона повинна бути (принаймні , для Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Дякую Жан Hominal за рада тут
MrWater

1
Як я можу перейти, встановивши це лише для HTML-коду? Тобто великий отримати val = 2 & val2 = 3 і т. Д.
Майк Джеймс

4
Я думаю, що req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Брайан Райс

2
Я використовую останню версію RestSharp, і цей метод підпису недоступний.
jrahhali

6

Щоб додати відповідь до @ dmitreyg та коментар per @ 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".
Тангадурай

Я спробував це і отримав нульовий посилання на виключення з відпочинку #. Знайдено рішення в 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.