Неправильный ответ при использовании RestSharp, однако он хорошо работает для httpclient - PullRequest
0 голосов
/ 13 сентября 2018

Получение неверного запроса на мой Json, если я использую RestSharp, однако он хорошо работает с httpClient.Ответ от API не распознается, и это неверный запрос.Первая строка SerialNumber равна NULL в отладчике.Может кто-нибудь помочь исправить кодировку.

            RestClient client = new RestSharp.RestClient(BaseUrl);
            RestRequest request = new RestSharp.RestRequest("/api/mobileservice/commissionv2", RestSharp.Method.POST);
            request.RequestFormat = DataFormat.Json;
            request.AddHeader("Content-Type", "application/json; charset = utf - 8");
            var strJSONContent = new Dictionary<string, string>
            {
                {"NexoController.SerialNumber", "AJUTESTDEVICE" },
                {"NexoController.FirmwareVersion", "80" }, 
                {"Retailer.Name", "TestShop" },
                {"Retailer.StoreId", "1" },
                {"Retailer.HasCompetitorCoolers", "true" },
                {"Retailer.CompetitorCoolerCount", "D82" },
                {"Cooler.CoolerManufacturerId", "0"},
                {"Cooler.ModelId", "1"},
                {"Cooler.ShelfCount", "5"},
                {"Cooler.Serial", "string"},
                {"Cooler.PositionId", "0"},
                {"Cooler.CustomerAssetId", "AJUTESTCUSTOMERASSETID"},
                {"Cooler.IsLocatedNextToCompetitorCooler", "true"},
                {"Cooler.ChannelId", "0"},
                {"Cooler.CoolerOtherManufacturerName", "string"},
                {"Cooler.CoolerOtherModelName", "string"},
                {"Beacon.Major", "210" },
                {"Beacon.Minor", "240" },
                {"PeriodTimeUTC", "string"},
                {"UtcOffset", "0"},
                {"Meta.BrandId", "1"},
                {"Meta.AccountNameId", "1"},
                {"DevicePosition.SerialNumber", "string"},
                {"DevicePosition.DeviceId", deviceId},
                {"DevicePosition.FirmwareVersion", "string"},
                {"DevicePosition.MDeviceUUID", "1"},
                {"DevicePosition.Position.Lat", "1"},
                {"DevicePosition.Position.Long", "1"},
                {"DevicePosition.Accuracy", "1"},
                {"DevicePosition.RSSI", "1"},
                {"DevicePosition.DetectionTypeId", "string" },
                {"DevicePosition.LocationAgeSeconds","0" },
                {"DevicePosition.PeriodTimeUTC","string" },
                {"DevicePosition.UtcOffset","0" },
                {"DevicePosition.UploadedBy","Aju" }
            };                
            //add parameters and token to request
            request.Parameters.Clear();                
            request.AddParameter("application/json", JsonConvert.SerializeObject(strJSONContent), ParameterType.RequestBody);
            request.AddParameter("Authorization", "Bearer " + authToken, ParameterType.HttpHeader);
            //make the API request and get a response
            var response = client.Execute(request);

1 Ответ

0 голосов
/ 20 сентября 2018

Если вы создаете POCO для хранения содержимого JSON, вы можете использовать метод AddJsonBody, где тело является объектом:

RestClient client = new RestSharp.RestClient(BaseUrl);
RestRequest request = new RestSharp.RestRequest("/api/mobileservice/commissionv2", RestSharp.Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddHeader("Content-Type", "application/json; charset = utf - 8");

request.AddJsonBody(body); 

request.AddParameter("Authorization", "Bearer " + authToken, ParameterType.HttpHeader);
var response = client.Execute(request);

И RestSharp должен обрабатывать сериализацию внутри. Имена свойств для POCO должны соответствовать ключам вашего JSON

...