RestSharpでリクエスト本文にテキストを追加する方法


103

RestSharpを使用してWebサービスを利用しようとしています。これまでのところ、すべてが順調に進んでいます(John Sheehanとすべての寄稿者に乾杯!)。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()が必要です。それが望ましくない場合は、達成しようとしているparams + xmlを含む本文の例をGoogleグループに投稿してください。groups.google.com/group/restsharp
ジョンシーハン

回答:


215

プレーンなXML文字列をリクエストの本文に追加する方法は次のとおりです。

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


34
+1同様に、プレーンなJSONを追加するには、req.AddParameter( "text / json"、body、ParameterType.RequestBody);です。
Paul Prewett、2012年

49
実際、Jsonの場合は(少なくともRailsの場合は)必要があります:ここreq.AddParameter("application/json", body, ParameterType.RequestBody);でのヒントを提供してくれたJean Hominalに感謝
MrWater

1
これをHTMLエンコードされた文字列に設定するにはどうすればよいですか?つまり、大きな値val = 2&val2 = 3などです
マイクジェームズ2013年

4
req.AddParameter( "application / x-www-form-urlencoded"、body、ParameterType.RequestBody);と思います。
Brian Rice

2
RestSharpの最新バージョンを使用していますが、このメソッドシグネチャは使用できません。
jrahhali 16

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」を使用しました。
タンガドゥライ2017

私はこれを試し、rest#内からnull参照例外を受け取りました。解が見つかりstackoverflow.com/a/44281853/109736
JasonCoder

@JasonCoderコメントをありがとう。同じバージョン、v105.2.3でしたか?私が尋ねる理由は、後のバージョンと結果が混在しているためです。同じに動作しない可能性があるのは現在106です。
興味深い名前

@GibralterTop私の結果は106.6.9でした
JasonCoder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.