代码之家  ›  专栏  ›  技术社区  ›  User987

C#在autopilot上不使用异步方法将httpclient post转换为restsharp post

  •  -1
  • User987  · 技术社区  · 5 年前

    我试图将这段代码从异步任务[Http客户端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 回复  |  直到 5 年前
        1
  •  2
  •   Richard Deeming    5 年前

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

    错误消息表明您正在调用的API不支持第二种传递数据的方法。换衣服 RestSharp 代码,以匹配您的URL和请求正文 HttpClient

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