WebClient UploadData 在发布具有扩展 ascii 字符的 json 数据时出现 400 Bad Request 错误
WebClient UploadData gives 400 Bad Request error while posting json data with extended ascii characters
我正在尝试与 mailchimp 同步联系人。当我在联系人详细信息中扩展了 ascii 字符,例如 (Johéctíóú Diamond) 时,它会出现以下错误。
远程服务器返回错误:(400) 错误请求。
at System.Net.WebClient.UploadDataInternal(Uri地址,String方法,Byte[]数据,WebRequest&请求)
at System.Net.WebClient.UploadString(Uri地址,字符串方法,字符串数据)
在 DealCloud.WinServices.MailChimp.MailChimpHelper.AddListMembersImpl(MailChimpServiceContext 上下文,字符串 listId,要添加的 List`1)
下面是发送 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 方法上抛出错误。我应该使用任何替代方法来解决此错误。
任何帮助将非常感激。
您很可能只需要指定 UTF8 编码
webClient.Encoding = Encoding.UTF8;
如果您不指定编码,WebClient 将根据 https://msdn.microsoft.com/en-us/library/system.text.encoding.default(v=vs.110).aspx
使用您系统的默认编码
据推测这与 MailChimp 不一致。
如果 mailchimp 想要提供更好的响应,您可以更好地了解调试器输出中的实际错误 window:
catch (WebException ex)
{
if (ex.Response != null)
{
string response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
Debug.WriteLine(response);
}
}
我正在尝试与 mailchimp 同步联系人。当我在联系人详细信息中扩展了 ascii 字符,例如 (Johéctíóú Diamond) 时,它会出现以下错误。
远程服务器返回错误:(400) 错误请求。 at System.Net.WebClient.UploadDataInternal(Uri地址,String方法,Byte[]数据,WebRequest&请求) at System.Net.WebClient.UploadString(Uri地址,字符串方法,字符串数据) 在 DealCloud.WinServices.MailChimp.MailChimpHelper.AddListMembersImpl(MailChimpServiceContext 上下文,字符串 listId,要添加的 List`1)
下面是发送 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 方法上抛出错误。我应该使用任何替代方法来解决此错误。 任何帮助将非常感激。
您很可能只需要指定 UTF8 编码
webClient.Encoding = Encoding.UTF8;
如果您不指定编码,WebClient 将根据 https://msdn.microsoft.com/en-us/library/system.text.encoding.default(v=vs.110).aspx
使用您系统的默认编码据推测这与 MailChimp 不一致。
如果 mailchimp 想要提供更好的响应,您可以更好地了解调试器输出中的实际错误 window:
catch (WebException ex)
{
if (ex.Response != null)
{
string response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
Debug.WriteLine(response);
}
}