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;
我有这段代码,我正在尝试将其从异步任务 [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;