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

时间:2017-02-01 12:49:31

标签: mailchimp restsharp mailchimp-api-v3.0

当使用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 个答案:

答案 0 :(得分: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)