С# преобразование сообщения httpclient в сообщение restsharp без асинхронного метода на автопилоте

У меня есть этот фрагмент кода, который я пытаюсь преобразовать из асинхронной задачи [Http client post] в метод Rest Sharp Post. Вот рабочий пример метода асинхронной задачи, который работает с httpclient:

       static async Task addEmailToListAsync(string ListName, string Email, string FirstName, string LastName)
    {
        try
        {
            var baseAddress = new Uri("https://api2.autopilothq.com/");

            using (var httpClient = new HttpClient { BaseAddress = baseAddress })
            {

                httpClient.DefaultRequestHeaders.TryAddWithoutValidation("autopilotapikey", "mykey");

                using (var content = new StringContent(""))
                {
                    using (var response = await httpClient.PostAsync("v1/list/" + ListName + "/contact/" + Email, content))
                    {
                        string responseData = await response.Content.ReadAsStringAsync();
                    }
                }
            }
        }
        catch (Exception)
        {

            await addEmailToListAsync(ListName, Email, FirstName, LastName);
        }


    }

Этот метод работает, и автопилот возвращает ответ в виде " { } ", что указывает на то, что все прошло хорошо.

Теперь я пытаюсь преобразовать это с помощью библиотеки restsharp и добиться того, чтобы метод был не асинхронной задачей, а простой функцией void:

       public static void addEmailToList(string ListName, string Email, string FirstName, string LastName)
        {

            var client = new RestClient("https://api2.autopilothq.com/");

            
            client.AddDefaultHeader("autopilotapikey", "mykey");

            var request = new RestRequest("v1/list",Method.POST);

            var jsonObj = JsonSerializer.Serialize(new 
            { 
                ListName = ListName,
                Contact = Email
            });

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

            var res = client.Execute(request).Content;

            var test = "";
        }

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

Что я здесь делаю неправильно? Я рву на себе волосы и не могу понять..

Кто-нибудь может мне помочь?

1 ответ

Ваш рабочий код отправляет имя списка и адрес электронной почты в URL-адресе, а также пустую строку в качестве тела запроса.

Ваша нерабочая версия отправляет имя списка и адрес электронной почты в виде сериализованной строки JSON в теле и опускает их в URL-адресе.

Сообщение об ошибке предполагает, что API, который вы вызываете, не поддерживает второй метод передачи данных. Измените свой RestSharpкод, соответствующий URL-адресу и телу запроса из вашего HttpClientкод.

      var request = new RestRequest("v1/list/" + ListName + "/contact/" + Email, Method.POST);
var res = client.Execute(request).Content;
Другие вопросы по тегам