2017-02-01 11 views
0

При использовании RestSharp для запроса данных учетной записи в вашей учетной записи MailChimp я получаю «401: unauthorized» с «ключом API отсутствует», хотя это явно не так!Ошибка «API-ключ отсутствует» при запросе сведений о счете в Mailchimp API 3.0 с помощью RestSharp

Мы используем тот же метод для создания нашего RestClient с несколькими различными методами, и во всех запросах он работает безупречно. Однако, когда мы пытаемся запросить данные учетной записи, то есть URI RestRequest пуст, мы получаем эту странную ошибку и сообщение.

Примеры:

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 
} 

При попытке вызова АФИ в Почтальон все хорошо. https://us2.api.mailchimp.com/3.0, GET с базовым auth дает мне всю информацию об учетной записи, а при отладке в 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

Это вызвало Serverside перенаправления «https://us2.api.mailchimp.com/3.0/» (с роспускного «/»), и по некоторым причинам это перенаправление очистило заголовок аутентификации.

Так что мы пытались сделать

new RestRequest("/", Method.GET)

с некоторыми параметрами (req.AddParameter("fields", "email")), чтобы сделать его не тереть завершающую «/», но это был провал.

Единственный способ, которым мы смогли «обмануть» RestSharp был написать это немного менее сексуально, как:

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

Смежные вопросы