So fügen Sie Text zum Anforderungshauptteil in RestSharp hinzu


103

Ich versuche, RestSharp zu verwenden, um einen Webdienst zu nutzen. Bisher ist alles sehr gut gelaufen (Prost an John Sheehan und alle Mitwirkenden!), Aber ich bin auf einen Haken gestoßen. Angenommen, ich möchte XML in seiner bereits serialisierten Form (dh als Zeichenfolge) in den Hauptteil meiner RestRequest einfügen. Gibt es eine einfache Möglichkeit, dies zu tun? Es scheint, dass die Funktion .AddBody () hinter den Kulissen eine Serialisierung durchführt, sodass meine Zeichenfolge in verwandelt wird <String />.

Jede Hilfe wird sehr geschätzt!

BEARBEITEN: Ein Beispiel meines aktuellen Codes wurde angefordert. Siehe unten --

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

Wie sieht Ihr aktueller Code aus? Und wo hast du das Problem?
Oded

2
Entschuldigung, habe das bis jetzt nicht gesehen. Sie möchten wahrscheinlich AddParameter () dafür. Wenn dies nicht der Fall ist, veröffentlichen Sie in der Google-Gruppe ein Beispiel für den Textkörper mit params + xml, den Sie erreichen möchten. groups.google.com/group/restsharp
John Sheehan

Antworten:


215

So fügen Sie dem Anforderungshauptteil eine einfache XML-Zeichenfolge hinzu:

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


34
+1 Um einfaches JSON hinzuzufügen, ist es ebenfalls req.AddParameter ("text / json", body, ParameterType.RequestBody);
Paul Prewett

49
Eigentlich sollte es für Json sein (zumindest für Rails): req.AddParameter("application/json", body, ParameterType.RequestBody);Danke an Jean Hominal für den Tipp hier
MrWater

1
Wie würde ich vorgehen, um dies auf eine HTML-codierte Zeichenfolge festzulegen? Dh ein großes get val = 2 & val2 = 3 usw.
Mike James

4
Ich würde denken, req.AddParameter ("application / x-www-form-urlencoded", body, ParameterType.RequestBody);
Brian Rice

2
Ich verwende die neueste Version von RestSharp und diese Methodensignatur ist nicht verfügbar.
Jrahhali

6

Um die Antwort von @ dmitreyg und den Kommentar von @ jrahhali zu seiner Antwort hinzuzufügen, lautet v105.2.3die Syntax in der aktuellen Version zum Zeitpunkt der Veröffentlichung wie folgt:

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
Ich habe es versucht, aber was auch immer ich im Parameter Name festgelegt habe, ist tatsächlich als Inhaltstyp festgelegt. Also habe ich sowohl für ContentType als auch für Name "application / json" verwendet.
Thangadurai

Ich habe dies versucht und eine Nullreferenzausnahme aus rest # erhalten. Eine Lösung gefunden unter stackoverflow.com/a/44281853/109736
JasonCoder

@ JasonCoder danke für den Kommentar. War es auch die gleiche Version, v105.2.3? Ich habe gemischte Ergebnisse mit späteren Versionen gehabt, ist der Grund, den ich frage. Es ist jetzt auf 106, die möglicherweise nicht gleich funktioniert.
interessanter Name hier

@ GibralterTop meine Ergebnisse waren mit 106.6.9
JasonCoder
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.