使用 RestSharp 向 Mailchimp API 3.0 查询帐户详细信息时出现“API 密钥丢失”错误

Posted

技术标签:

【中文标题】使用 RestSharp 向 Mailchimp API 3.0 查询帐户详细信息时出现“API 密钥丢失”错误【英文标题】:Get "API key is missing" error when querying account details to Mailchimp API 3.0 using RestSharp 【发布时间】:2017-06-18 05:29:40 【问题描述】:

使用 RestSharp 查询 MailChimp 帐户中的帐户详细信息时,我收到“401:未授权”和“API 密钥丢失”,即使它显然不是!

我们使用相同的方法通过几种不同的方法创建我们的 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 中的错误。有没有人遇到过类似的问题?

【问题讨论】:

【参考方案1】:

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

当 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/”(带有尾随“/”),并且由于某种原因,此重定向清除了身份验证标头。

所以我们尝试制作一个

new RestRequest("/", Method.GET)

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

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

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

【讨论】:

以上是关于使用 RestSharp 向 Mailchimp API 3.0 查询帐户详细信息时出现“API 密钥丢失”错误的主要内容,如果未能解决你的问题,请参考以下文章

Mailchimp 每次都向订阅者发送所有提要

使用带有 AJAX 的 API 向 Mailchimp 发送/包含“名称”字段

使用 Java 和 Jersey 客户端向 Mailchimp 受众添加新订阅者

使用 Vue.js 和 Axios 向 Mailchimp 提交表单会导致 CORS 错误

发送 OAuth 令牌在 Postman 中有效,但在 RestSharp 中无效

向 MailChimp 添加新订阅者返回错误请求