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);
}
您的代码有几个问题:
- 您将电子邮件地址和状态作为查询字符串参数发送,而不是 JSON
- 以这种方式使用 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);
}
我有以下调用 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);
}
您的代码有几个问题:
- 您将电子邮件地址和状态作为查询字符串参数发送,而不是 JSON
- 以这种方式使用 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);
}