Restsharp: 生のJSONをPOSTできません

作成日 2015年06月17日  ·  3コメント  ·  ソース: restsharp/RestSharp

私はRESTSharpを初めて使用しますが、一般的にRESTを使用するのは比較的新しいです。 私はPostmanでこのサービス呼び出しをテストしましたが、これと同じ入力で正常に機能しますが、json文字列が生のテキストとして渡された場合に限ります。

サービスが内部サーバーエラーを返します:「予期されたパラメータ「ポリシー」が渡されませんでした」。

            string postData = @"{""Policy"":{""PolicyId"": 123456, ""Holder"": ""TestHolder Name"", ""HolderAddress"": {  ""Line1"": ""Address1"",  ""Line2"": ""address2"", ""City"": ""MyCity"", ""State"": ""ME"", ""Zip"": ""04079""}}}";

            var client = new RestClient(DecisionsSettings.DecisionsURL);
            client.AddDefaultHeader("Content-Type", "application/json");

            var request = new RestRequest("/decisions/Primary/?RuleId=" + _RuleId + "&Action=api&outputtype=JSON", Method.POST);

            request.AddParameter("userid", DecisionsSettings.DecisionsUsername);
            request.AddParameter("password", DecisionsSettings.DecisionsPassword);
            request.RequestFormat = DataFormat.Json;

           // request.AddBody(postData);//this did not work
            request.AddParameter("application/json; charset=utf-8", postData, ParameterType.RequestBody);



            var response = client.Execute(request);
            responseString = response.Content;

最も参考になるコメント

@hallem AddJsonBodyの使用は、jsonオブジェクトを想定しているため、機能しません。 現在のところ、生のjson文字列を渡す方法はありません(AddBody、およびコンテンツをJsonに設定することは機能しません)。 回避策は、生の文字列を取得し、jsonオブジェクトに逆シリアル化してから、それをRestsharpAddJsonBodyに渡すことです。 Restsharpは、最初に必要だった文字列にシリアル化して戻すため、間違いなく無駄な回避策です。

編集:AddJsonBody()とAddBody()のコードを比較した後、リクエスト本文に生のJSONを追加するために使用できる回避策は次のとおりです。

request.AddParameter("application/json", rawJson, ParameterType.RequestBody);

全てのコメント3件

代わりにrequest.AddJsonBodyを使用してください。

それを試してみました-すでに逆シリアル化されていても、逆シリアル化します。
私は解決策を見つけました。 生のテキストを送信するには、content-type = "text / plain"を使用する必要がありました。 テキストがjsonとしてフォーマットされているという事実は明らかに問題ではありません。

@hallem AddJsonBodyの使用は、jsonオブジェクトを想定しているため、機能しません。 現在のところ、生のjson文字列を渡す方法はありません(AddBody、およびコンテンツをJsonに設定することは機能しません)。 回避策は、生の文字列を取得し、jsonオブジェクトに逆シリアル化してから、それをRestsharpAddJsonBodyに渡すことです。 Restsharpは、最初に必要だった文字列にシリアル化して戻すため、間違いなく無駄な回避策です。

編集:AddJsonBody()とAddBody()のコードを比較した後、リクエスト本文に生のJSONを追加するために使用できる回避策は次のとおりです。

request.AddParameter("application/json", rawJson, ParameterType.RequestBody);

このページは役に立ちましたか?
0 / 5 - 0 評価