【发布时间】:2021-09-15 16:26:08
【问题描述】:
我有这段代码,我正在尝试将异步任务 [Http 客户端帖子] 转换为休息敏锐的帖子方法。这是与 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 的消息,表明正文数据无效...
我在这里做错了什么?我把头发拉出来了,我想不通..
谁能帮帮我?
【问题讨论】:
-
为什么要把它从异步变为非异步?这与我们通常采取的相反方向。无论如何,如果您遇到错误,那么您需要在问题中发布确切的详细信息。它发生在哪条线上?完整的消息和堆栈跟踪是什么?有没有内部异常?
-
@mason 代码中没有错误-而是在形成请求的方式中-只是在我尝试的第二个示例中的方法中-我从API获得了请求的响应没有很好地创建......只是无法理解为什么......我不明白这种类型的帖子应该如何:httpClient.PostAsync(“v1/list/”+ ListName +“/contact/”+电子邮件,内容)) - 看起来像在 restsharp 中:/
-
在第一个示例中,您似乎正在向请求正文为空且 URL 包含您的值的 URL 发出 POST 请求。在第二个示例中,您似乎正在发出一个 POST 请求,其中值位于正文而不是 URL 中。这是本意吗?如果服务器回复请求无效,可能是这个意图是错误的?
-
好吧,您的 HttpClient 尝试发布到
https://api2.autopilothq.com/v1/list/<List Name>/contact/<Email>,而您的 RestSharp 尝试发布到https://api2.autopilothq.com/v1/list。你看到它们有什么不同吗?使它们相同。
标签: c# asp.net asp.net-mvc restsharp autopilot