С# преобразование сообщения 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;