使用 RestSharp 向 Mailchimp API 3.0 查询帐户详细信息时出现 "API key is missing" 错误

Get "API key is missing" error when querying account details to Mailchimp API 3.0 using RestSharp

当使用 RestSharp 查询您的 MailChimp 帐户中的帐户详细信息时,我收到 "API key is missing" 的“401:未经授权”,尽管它显然不是!

我们使用相同的方法通过几种不同的方法创建我们的 RestClient,并且在所有请求中它都可以完美地工作。但是,当我们尝试请求帐户详细信息时,这意味着 RestRequest URI 为空,我们收到此奇怪的错误和消息。

示例:

private static RestClient CreateApi3Client(string apikey)
{
    var client = new RestClient("https://us2.api.mailchimp.com/3.0");
    client.Authenticator = new HttpBasicAuthenticator(null, apiKey);

    return client;
}

public void TestCases() {
    var client = CreateApi3Client(_account.MailChimpApiKey);

    var req1 = new RestRequest($"lists/{_account.MailChimpList}/webhooks", Method.GET); 
    var res1 = client.Execute(req1); // works perfectly 

    var req2 = new RestRequest($"automations/{account.MailChimpTriggerEmail}/emails", Method.GET); 
    var res2 = client.Execute(req2); // no problem

    var req3 = new RestRequest(Method.GET); 
    var res3 = client.Execute(req3); // will give 401, api key missing

    var req4 = new RestRequest(string.Empty, Method.GET); 
    var res4 = client.Execute(req4); // same here, 401
}

尝试在 Postman 中调用 api 时一切正常。 https://us2.api.mailchimp.com/3.0,使用基本身份验证的 GET 为我提供了所有帐户信息,并且在 c# 中调试时看起来完全相同。

我正在尝试决定是否将责任归咎于 RestSharp 或 MailChimp API 中的错误。有没有人遇到过类似的问题?

几个小时后,我们终于找到了造成这种情况的原因..

当 RestSharp 向 https://us2.api.mailchimp.com/3.0/ 发出请求时,它选择省略尾随的“/” (即使您在 RestRequest 中专门添加了它,例如:new RestRequest("/", Method.GET)

因此向 https://us2.api.mailchimp.com/3.0

提出了请求

这导致服务器端重定向到“https://us2.api.mailchimp.com/3.0/”(,尾随的“/”为)并且出于某种原因,此重定向清除了身份验证header.

所以我们尝试制作

new RestRequest("/", Method.GET)

使用一些参数 (req.AddParameter("fields", "email")) 使其不擦除尾随的“/”,但这是失败的。

我们能够 "fool" RestSharp 的唯一方法是把它写得不那么性感,比如:

new RestRequest("/?fields=email", Method.GET)