Post 请求 MailChimp API v3 总是 returns 未经授权

Post request to MailChimp API v3 always returns unauthorized

我有以下调用 post 订阅 Mailchimp 列表,但它 returns 未经授权。我将 API 密钥、列表和用户名存储在 web.config 中,我已经对其进行了三重检查。

using (var wc = new System.Net.WebClient())
{
    string parameters = string.Concat("email_address=", email, "&status=", "subscribed"),
           url = "https://us12.api.mailchimp.com/3.0/lists/" + ConfigurationManager.AppSettings["MailChimp.ListId"] + "/members";

    wc.Headers.Add("Content-Type", "application/json");

    wc.Credentials = new NetworkCredential("", ConfigurationManager.AppSettings["MailChimp.ApiKey"]);

    string result = wc.UploadString(url, parameters);
}

您的代码有几个问题:

  1. 您将电子邮件地址和状态作为查询字符串参数发送,而不是 JSON
  2. 以这种方式使用 WebClient 发送凭据无法正常工作。

尝试以下操作:

var apiKey = "<api-key>";
var listId = "<your-list-id>";
var email = "<email-address-to-add>";

using (var wc = new System.Net.WebClient())
{
    // Data to be posted to add email address to list
    var data = new { email_address = email, status = "subscribed" };

    // Serialize to JSON using Json.Net
    var json = JsonConvert.SerializeObject(data);

    // Base URL to MailChimp API
    string apiUrl = "https://us12.api.mailchimp.com/3.0/";

    // Construct URL to API endpoint being used
    var url = string.Concat(apiUrl, "lists/", listId, "/members");

    // Set content type
    wc.Headers.Add("Content-Type", "application/json");

    // Generate authorization header
    string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(":" + apiKey));

    // Set authorization header
    wc.Headers[HttpRequestHeader.Authorization] = string.Format("Basic {0}", credentials);

    // Post and get JSON response
    string result = wc.UploadString(url, json);
}