使用扩展的ascii字符

时间:2017-11-07 17:20:58

标签: c# asp.net json webclient webrequest

我正在尝试与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方法上抛出错误。是否有任何替代方法我应该用来解决此错误。 任何帮助将非常感激。

2 个答案:

答案 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。