如何在C#中使用API Key调用Campaign Monitor API添加订阅者(解决401错误)
解决Campaign Monitor API 401未认证问题(添加订阅者场景)
嘿,这个401错误的原因很明确——你的请求完全没带上身份验证信息,Campaign Monitor API认不出你是谁,所以直接拒绝了请求。别担心,我一步步教你怎么用API Key搞定认证:
核心问题:缺少Basic Authentication头
Campaign Monitor API要求用Basic认证验证身份,规则特别简单:
- 把你的API Key作为「用户名」
- 「密码」可以留空(或者随便填个字符串,服务器不会校验这部分)
- 把
{你的API Key}:这个字符串(注意末尾的冒号)转换成Base64编码,然后放到请求头的Authorization字段里
修改你的C#代码
这里给你两种可行的修改方式,选一种就行:
方式1:直接添加Authorization请求头
using (var client = new HttpClient()) { // 1. 替换成你自己的真实API Key string apiKey = "your-real-api-key-here"; // 2. 生成Basic认证所需的Base64编码字符串 string encodedAuth = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{apiKey}:")); // 3. 给HttpClient添加认证头 client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", encodedAuth); // 4. 保留你原有的请求逻辑(记得替换LISTID为真实的订阅列表ID) var response = await client.PostAsync( "https://api.createsend.com/api/v3.1/subscribers/LISTID.json", new StringContent(senderInfo, Encoding.UTF8, "application/json") ); // 可以加个简单的响应检查,方便调试 if (response.IsSuccessStatusCode) { Console.WriteLine("订阅者添加成功!"); } else { string errorDetail = await response.Content.ReadAsStringAsync(); Console.WriteLine($"请求失败:{response.StatusCode} - {errorDetail}"); } }
方式2:使用HttpClientHandler设置Credentials
如果你更喜欢用.NET内置的凭证机制,也可以这么写:
var handler = new HttpClientHandler { Credentials = new NetworkCredential("your-real-api-key-here", "") // 密码留空即可 }; using (var client = new HttpClient(handler)) { var response = await client.PostAsync( "https://api.createsend.com/api/v3.1/subscribers/LISTID.json", new StringContent(senderInfo, Encoding.UTF8, "application/json") ); // 同样可以添加响应调试代码 }
额外检查项
除了认证,再确认这两点避免踩坑:
- 确保
LISTID是你目标订阅列表的真实ID(可以在Campaign Monitor后台的列表设置页面找到) - 你的JSON数据格式是对的,
"Email Address"和"Name"都是API要求的合法字段,没问题
这样修改后,应该就能成功添加订阅者啦!
内容的提问来源于stack exchange,提问作者jsg
相关产品推荐
相关产品推荐

