我有一个 Web API 服务,我正在尝试使用 RestSharp 通过控制台访问它。我的 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 操作采用与上述模型具有相同参数的模型。调用执行时,绑定失败,参数为空。我怀疑这是由于 RestRequest.AddBody 方法将 application/json 附加到正文值,如下所示:
{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 参数的 AddParameter、AddObject、不同的 URL 样式等)。
有没有其他人遇到过这个,如果有,你解决了吗?我为此服务选择了 Web API,希望模型绑定能够像在 MVC 中那样工作,但我发现情况并非如此。
谢谢
编辑(已解决):RestSharp 自动将 JsonSerializer 用于在 AddBody 方法中传递的对象。我想我错过了一些简单的东西,实际上我是......将 Method.Post 参数添加到 RestRequest 实例化解决了这个问题。