Jak dodać tekst do żądania treści w RestSharp

103

Próbuję użyć RestSharp do korzystania z usługi sieci Web. Jak dotąd wszystko poszło bardzo dobrze (wiwaty dla Johna Sheehana i wszystkich współpracowników!), Ale napotkałem problem. Powiedzmy, że chcę wstawić XML do treści mojego RestRequest w jego już zserializowanej formie (tj. Jako ciąg). Czy jest na to łatwy sposób? Wygląda na to, że funkcja .AddBody () przeprowadza serializację za kulisami, więc mój ciąg jest zamieniany na <String />.

Każda pomoc jest mile widziana!

EDYCJA: zażądano próbki mojego obecnego kodu. Zobacz poniżej -

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.
źródło
Jak wygląda Twój obecny kod? A gdzie w tym masz problem?
Oded
2
przepraszam, do tej pory tego nie widziałem. prawdopodobnie potrzebujesz do tego AddParameter (). jeśli nie tego chcesz, prześlij do grupy google z przykładem treści z params + xml, które próbujesz osiągnąć. groups.google.com/group/restsharp
John Sheehan

Odpowiedzi:

215

Oto jak dodać zwykły ciąg XML do treści żądania:

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

dmitreyg
źródło
34
+1 Podobnie, aby dodać zwykły JSON, jest to req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett
49
Właściwie dla Json powinno to być (przynajmniej dla Railsów): req.AddParameter("application/json", body, ParameterType.RequestBody);Dzięki Jeanowi Hominalowi za wskazówkę tutaj
MrWater
1
Jak bym się zabrał, ustawiając to na ciąg zakodowany w formacie HTML? To znaczy duże get val = 2 & val2 = 3 itd.
mike james
4
Myślę, że req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice
2
Używam najnowszej wersji RestSharp i ta sygnatura metody nie jest dostępna.
jrahhali
6

Aby dodać do odpowiedzi @ dmitreyga i zgodnie z komentarzem @ jrahhali do jego odpowiedzi, w aktualnej wersji, w momencie opublikowania v105.2.3, składnia jest następująca:

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
});
interesująca-nazwa-tutaj
źródło
1
Próbowałem tego, ale to, co kiedykolwiek ustawiłem w parametrze Nazwa, jest w rzeczywistości ustawione jako typ zawartości. Więc zarówno dla ContentType, jak i Name, użyłem „application / json”.
Thangadurai
Próbowałem tego i otrzymałem zerowy wyjątek odwołania z reszty #. Znalazłem rozwiązanie na stackoverflow.com/a/44281853/109736
JasonCoder
@JasonCoder dzięki za komentarz. Czy była to również ta sama wersja, v105.2.3? Pytam o mieszane wyniki z późniejszymi wersjami. Jest teraz na 106, który może nie działać tak samo.
interesująca-nazwa-tutaj
@GibralterTop moje wyniki to 106.6.9
JasonCoder