2016-01-26 35 views
4

连接到新的MailChimp 3.0 API(2.0正常工作)时出现问题。与MailChimp v3.0的连接API

我想寄一些订户。我究竟做错了什么?我可能试图以错误的方式发送apikey(HTTP基本身份验证)。文档在这里,但我无法使其工作:http://developer.mailchimp.com/documentation/mailchimp/guides/get-started-with-mailchimp-api-3/

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://us12.api.mailchimp.com/3.0/lists/<listnumber>/members/"); 

string json = @" 
    { 
     ""email_address"": ""[email protected]"", 
     ""status"": ""subscribed"", 
     ""merge_fields"": { 
        ""FNAME"": ""Urist"", 
      ""LNAME"": ""McVankab"" 
     } 
    } 
"; 

byte[] data = Encoding.UTF8.GetBytes(json); 

request.Method = "POST"; 
request.Headers.Add("user", "<mykeynumber>"); 
request.ContentType = "application/json"; 
request.ContentLength = data.Length; 

using (System.IO.Stream stream = request.GetRequestStream()) 
{ 
    stream.Write(data, 0, data.Length); 
} 
+0

你看到了什么样的错误? – Mateo

回答

1

主要问题似乎是验证。这是一个很好的答案,demonstrates HTTP Basic Auth with HTTPWebRequest

+1

非常感谢你,链接帮助。所以标题应该是: request.Headers.Add(“Authorization”,“Basic”+ apikey); –

+0

很高兴帮助。请注意,[HTTP基本身份验证](https://en.wikipedia.org/wiki/Basic_access_authentication)要求“basic”之后的部分为Base64编码的字符串,如果这是您要做的。 – TooMuchPete

0

任何其他人都来到这里,我一直在玩,我认为现在最好使用ASP.NET Web API库来调用它。我这下面这个例子的工作:https://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

,并从这个问题的答案一起合并它:Calling MailChimp API v3.0 with .Net

的例子使用了一个简单的Windows控制台应用程序,但可以移植到网络:

// New code: 
    static HttpClient client = new HttpClient(); 

    static void Main() 
    { 
     RunAsync().Wait(); 
    } 

    static async Task RunAsync() 
    { 
     // New code: 
     client.BaseAddress = new Uri("https://us5.api.mailchimp.com/3.0/"); 

     client.DefaultRequestHeaders.Accept.Clear(); 

     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "<YOUR_API_KEY_HERE>"); 

     try { 

      HttpResponseMessage response = await client.GetAsync(""); 

      if (response.IsSuccessStatusCode) { 

       var results = await response.Content.ReadAsStringAsync(); 

       Console.WriteLine($"results (HTTP Status = {results})"); 
      } 
      else { 

       Console.WriteLine($"ERROR (HTTP Status = {response.StatusCode}"); 
      } 


     } 
     catch (Exception e) { 
      Console.WriteLine(e.Message); 
     } 

     Console.ReadLine(); 
    }