Restsharp: Невозможно опубликовать необработанный JSON

Созданный на 17 июн. 2015  ·  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, а затем передать ее в Restsharp AddJsonBody. Определенно расточительный обходной путь, поскольку 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, а затем передать ее в Restsharp AddJsonBody. Определенно расточительный обходной путь, поскольку Restsharp сериализуется обратно в строку, с которой мы должны были начать.

РЕДАКТИРОВАТЬ: после сравнения кода для AddJsonBody() и AddBody() можно использовать обходной путь, который можно использовать для добавления необработанного JSON в тело запроса:

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги