Я новичок в 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, а затем передать ее в Restsharp AddJsonBody. Определенно расточительный обходной путь, поскольку Restsharp сериализуется обратно в строку, с которой мы должны были начать.
РЕДАКТИРОВАТЬ: после сравнения кода для AddJsonBody() и AddBody() можно использовать обходной путь, который можно использовать для добавления необработанного JSON в тело запроса:
request.AddParameter("application/json", rawJson, ParameterType.RequestBody);
Самый полезный комментарий
@hallem Использование AddJsonBody не сработает, так как ожидается объект json. На данный момент нет возможности передать необработанную строку json (AddBody и установка содержимого в Json не работает). Обходной путь — получить необработанную строку, десериализовать ее в объект json, а затем передать ее в Restsharp AddJsonBody. Определенно расточительный обходной путь, поскольку Restsharp сериализуется обратно в строку, с которой мы должны были начать.
РЕДАКТИРОВАТЬ: после сравнения кода для AddJsonBody() и AddBody() можно использовать обходной путь, который можно использовать для добавления необработанного JSON в тело запроса:
request.AddParameter("application/json", rawJson, ParameterType.RequestBody);