Публикация в WS с Restsharp не удалась - PullRequest
0 голосов
/ 11 июля 2020

Существует внешний веб-сервис, который мне нужно отправить некоторые данные для создания устройства. Они используют чванство, и в чванстве, которое я могу протестировать, он работает, но когда я использую restsharp, он работает неправильно. Он не выдает никаких ошибок (возвращает 200 в качестве кода состояния), но не создает устройство. PS: метод GET Wwebservice работает, но сообщение не

вот завиток, когда я использую swagger

curl -X POST "website/keys/generate" -H  "accept: application/json" -H  "Authorization: Bearer blablablablablabla" 
-H  "Content-Type: application/json" -d "{\"deviceIds\":[\"10000000\"],\"keyNames\":[\"DeviceKey1\"],
\"externalReference\":\"ERD-1\"}"

как json, запрос должен быть

{
  "deviceIds": [
    "10000000"
  ],
  "keyNames": [
    "DeviceKey1"
  ],
  "externalReference": "ERD-1"
}

и вот мой код

var request = new RestRequest(Method.POST);
request.AddHeader("accept", "application/json");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;

request.AddParameter("deviceIds", deviceGenerationRequest.deviceIds.ToArray());
request.AddParameter("keyNames", deviceGenerationRequest.keyNames.ToArray());
request.AddParameter("externalReference", deviceGenerationRequest.externalReference);
var result = await _apiCaller.CallAPI(url, request);

а вот содержимое метода CallAPI

var client = new RestClient(url);
client.AddDefaultHeader("Authorization", "Bearer " + _token);
IRestResponse response; 
response = await client.ExecuteGetAsync(request);

В чем моя ошибка?

Изменить :

вместо Restsharp, я использовал HttpWebResponse, и он работает

var query = JsonConvert.SerializeObject(deviceGenerationRequest);

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);

    httpWebRequest.ContentType = "application/json";
    httpWebRequest.Method = "POST";
    httpWebRequest.Headers.Add("Authorization", "Bearer blabla");

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
      streamWriter.Write(query);
    }

 var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
 using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
 {
  var result3 = streamReader.ReadToEnd();
 }

1 Ответ

0 голосов
/ 11 июля 2020

Есть два способа публикации данных с использованием rest sharp

Case 1

Передайте все параметры как json в одном параметре и используйте тип содержимого для application\json

request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\r\n  \"deviceIds\": [\r\n    \"10000000\"\r\n  ],\r\n  \"keyNames\": [\r\n    \"DeviceKey1\"\r\n  ],\r\n  \"externalReference\": \"ERD-1\"\r\n}",  ParameterType.RequestBody);

Случай 2

Передавать параметры индивидуально. Если вы отправляете параметры индивидуально, измените тип содержимого на этот

request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("deviceIds", deviceGenerationRequest.deviceIds.ToArray());
request.AddParameter("keyNames", deviceGenerationRequest.keyNames.ToArray());
request.AddParameter("externalReference", deviceGenerationRequest.externalReference);

Я не уверен насчет разрешения, но, скорее всего, так оно и есть. Кроме этого, все выглядит хорошо

...