私は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;
代わりに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);
最も参考になるコメント
@hallem AddJsonBodyの使用は、jsonオブジェクトを想定しているため、機能しません。 現在のところ、生のjson文字列を渡す方法はありません(AddBody、およびコンテンツをJsonに設定することは機能しません)。 回避策は、生の文字列を取得し、jsonオブジェクトに逆シリアル化してから、それをRestsharpAddJsonBodyに渡すことです。 Restsharpは、最初に必要だった文字列にシリアル化して戻すため、間違いなく無駄な回避策です。
編集:AddJsonBody()とAddBody()のコードを比較した後、リクエスト本文に生のJSONを追加するために使用できる回避策は次のとおりです。
request.AddParameter("application/json", rawJson, ParameterType.RequestBody);