RestSharp を使用してコンソール経由でアクセスしようとしている Web API サービスがあります。私の RestSharp コードは次のようになります。
RestClient client = new RestClient(baseUrlString);
RestRequest request = new RestRequest("controllername/actionname");
request.RequestFormat = DataFormat.Json;
ProcessQuestion model = new ProcessQuestion()
{
Id = "123456",
InstanceId = "123",
UniqueId = "bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626",
PostedAnswer = new Dictionary<string, string>() { { "question_7907_1", "selected" }, { "question_7907_2", "selected" } }
};
request.AddBody(model);
var response = client.Execute(request)
私の Web API アクションは、上記のモデルと同じパラメーターを持つモデルを取ります。呼び出しが実行されると、バインドは失敗し、パラメーターは null になります。これは、以下に示すように、RestRequest.AddBody メソッドが application/json を body 値の前に追加したことが原因であると思われます。
{application/json={"Id":"123456","InstanceId":"123","UniqueId":"bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626","PostedAnswer":{"question_7907_1":"selected","question_7907_2":"selected"}}}
Fiddler を使用して投稿すると、ボディがモデルに適切にバインドされます。以下は、私が Fiddler で提供した body 値です。
{'Id':'123456','InstanceId':'123','Uniqueid':'bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626','PostedAnswer':{'question_7907_1':'selected','question_7907_2':'selected'}}
fiddler の body 値は、先頭に application/json キーを追加することを除いて同じであることに注意してください。
また、すべてのように見えるものを試しました...アクションでパラメーターを分離し、FromBody 属性と FromUri 属性を使用し、カスタム DictionaryModelBinder を試し、カスタム ValueBinders を試し、RestSharp の使用方法を変更しようとしました ( RequestBody パラメーター、AddObject、さまざまな URL スタイルなどを含む AddParameter )。
他の誰かがこれに遭遇しましたか?もしそうなら、あなたはそれを解決しましたか? モデル バインディングが MVC の場合と同じように機能することを期待して、このサービスに Web API を選択しましたが、そうではないことがわかりました。
ありがとう
編集 (解決済み): RestSharp は、AddBody メソッドで渡されたオブジェクトに JsonSerializer を自動的に使用します。私は単純なものが欠けていると思っていましたが、実際には... Method.Post パラメーターを RestRequest インスタンス化に追加すると、問題が解決しました。