向 MailChimp API v3 发布请求总是返回未经授权的请求

本文关键字:请求 返回 授权 v3 API 布请求 MailChimp | 更新日期: 2023-09-27 18:37:24

我有以下调用来发布对 Mailchimp 列表的订阅,但它返回未经授权的内容。我有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);
}

向 MailChimp API v3 发布请求总是返回未经授权的请求

您的代码存在几个问题:

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

请尝试以下操作:

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);
}