C# 将 httpclient post 转换为 restsharp post,在自动驾驶仪上没有异步方法

C# converting httpclient post into restsharp post without async method on autopilot

我有这段代码,我正在尝试将其从异步任务 [Http 客户端 post] 转换为休息敏锐的 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);
        }


    }

此方法有效,自动驾驶仪 returns 以“{ }”形式响应 - 这表明一切顺利。

现在我正在尝试使用 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 的消息,指出正文数据无效...

我在这里做错了什么?我正在拔头发,我无法弄清楚..

有人可以帮我吗?

您的工作代码在 URL 中发送列表名称和电子邮件地址,以及一个空字符串作为请求正文。

您的非工作版本将列表名称和电子邮件地址作为正文中的 JSON 序列化字符串发送,并在 URL.

中省略它们

错误信息提示您调用的API不支持第二种数据传递方式。更改您的 RestSharp 代码以匹配来自您的 HttpClient 代码的 URL 和请求正文。

var request = new RestRequest("v1/list/" + ListName + "/contact/" + Email, Method.POST);
var res = client.Execute(request).Content;