Невозможно добавить параметры, чтобы сделать запрос GET с клиентом C # RestSharp - PullRequest
0 голосов
/ 30 октября 2019

Я впервые работаю с API, и я очень признателен за вашу помощь и терпение в связи со мной.

Я делаю GET-запрос к клиенту Synccentric для получения данных [Ниже приведен URL-адресЯ использую для ссылки].

https://api.synccentric.com/?version=latest#cb8d3255-7639-435e-9d17-c9e962c24146

Я получаю ответ OK (422), однако он не завершен, также должны потребоваться дополнительные данные

Проблема под рукой, я не могу передать требуемые параметры

        Console.WriteLine("**** Starting Synccentric API Fetch ****");
        var client = new RestClient("https://v3.synccentric.com/api/v3/products");
        var request = new RestRequest(Method.GET);
        Console.WriteLine("**** Adding Headers, Content Type & Auth Key ****");
        request.AddHeader("Content-Type", "application/json");
        request.AddHeader("Authorization", "Bearer {{MyAPIToken}}");
        var requestBody = new StringContent("{\n    \"campaign_id\": 1523,\n    \"downloadable\": true,\n    \"downloadable_type\": \"CSV\",\n    \"fields\": [\n        \"asin\",\n        \"upc\",\n        \"actor\",\n        \"all_categories\"\n    ]\n}");
        request.AddParameter("data", requestBody, ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);

Это дает мне успешный результат, но поля, которые я упомянул, не возвращаются. Кроме того, результат возвращается в разбивке по страницам, что хорошо, но я также был бы признателен, если бы вы указали мне, как проходить через данные.

В качестве альтернативы я попытался сделать запрос cURL для того же самого ибыло получено как исключение

        using (var httpClient = new HttpClient())
        {
            using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://v3.synccentric.com/api/v3/products"))
            {
                request.Headers.TryAddWithoutValidation("Authorization", "Bearer {{MyAPIToken}}");

                request.Content = new StringContent("{\n    \"campaign_id\": 12618,\n    \"downloadable\": true,\n    \"downloadable_type\": \"CSV\",\n    \"fields\": [\n        \"asin\",\n        \"upc\",\n        \"actor\",\n        \"all_categories\"\n    ]\n}");

                var response = await httpClient.SendAsync(request);
            }
        }

Этот блок возвращает с System.Net.ProtocolViolationException: «Не удается отправить тело содержимого с этим типом глагола.» при выполнении ответа.

Если вы все сможете найти решение для меня по любому из вышеперечисленных, это будет действительно здорово, так как я застрял с этим более недели, пожалуйста, помогите!

1 Ответ

0 голосов
/ 30 октября 2019

RestSharp не позволит вам отправить запрос GET с телом содержимого. Ошибка говорит само за себя.

Вам нужно будет отправить параметры в качестве параметров запроса.

Console.WriteLine("**** Starting Synccentric API Fetch ****");
var client = new RestClient("https://v3.synccentric.com/api/v3/products");
var request = new RestRequest(Method.GET);

Console.WriteLine("**** Adding Headers, Content Type & Auth Key ****");
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{MyAPIToken}}");

Console.WriteLine("**** Adding parameters ****");
request.AddParameter("campaign_id", 12618);
request.AddParameter("downloadable", "true");
request.AddParameter("downloadable_type", "CSV");

var fields = new[] { "asin", "upc", "actor", "all_categories" };
foreach (var field in fields)
{
    request.AddParameter("fields", field);
}

IRestResponse response = client.Execute(request);

Это создаст вам следующую строку запроса, которая должна быть отправлена ​​и, надо надеяться, понятна.

https://v3.synccentric.com/api/v3/products?campaign_id=12618&downloadable=True&downloadable_type=CSV&fields=asin&fields=upc&fields=actor&fields=all_categories

ОБНОВЛЕНИЕ Возможно, после просмотра комментариев RestSharp не может использоваться с этим API, так как для него требуется тело контента с запросом GET!

...