我正在尝试与mailchimp同步联系人。当我在联系方式中扩展了诸如(JohéctíóúDiamond)之类的ascii字符时,它会给出以下错误。
远程服务器返回错误:(400)错误请求。 在System.Net.WebClient.UploadDataInternal(Uri地址,字符串方法,字节[]数据,WebRequest和请求) 在System.Net.WebClient.UploadString(Uri地址,String方法,字符串数据) 在DealCloud.WinServices.MailChimp.MailChimpHelper.AddListMembersImpl(MailChimpServiceContext context,String listId,List`1 toAdd)
以下是发送json数据的代码。
internal virtual string AddListMembersImpl(MailChimpServiceContext context, string listId, List<MailChimpMember> toAdd)
{
if (!(toAdd?.Any() ?? false)) return null;
var uri = string.Format("{0}/batches", context.Url/*, listId*/);
using (var webClient = new WebClient())
{
webClient.Headers.Add("Accept", "application/json");
webClient.Headers.Add("Authorization", "apikey " + context.ApiKey);
//var path = $"lists/{listId}/members";
var toSer = new { operations = toAdd.Select(x => new { method = "POST", path = $"lists/{listId}/members", body = JsonConvert.SerializeObject(new { email_address = x.Email, status = x.Status, merge_fields = x.MergeFields }) }) };
var data = JsonConvert.SerializeObject(toSer, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
var ret = webClient.UploadString(uri, "POST", data);
var o = JObject.Parse(ret);
return o["id"]?.ToString();
}
}
它会在webClient.UploadString方法上抛出错误。是否有任何替代方法我应该用来解决此错误。 任何帮助将非常感激。
答案 0 :(得分:2)
如果mailchimp关心提供更好的响应,您可以通过以下方式更好地了解调试器输出窗口中的实际错误:
catch (WebException ex)
{
if (ex.Response != null)
{
string response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
Debug.WriteLine(response);
}
}
答案 1 :(得分:0)
您很可能只需要指定UTF8编码
webClient.Encoding = Encoding.UTF8;
如果您没有指定编码,那么WebClient将使用系统的默认值,每https://msdn.microsoft.com/en-us/library/system.text.encoding.default(v=vs.110).aspx
据推测,他们不同意MailChimp。