WebClient UploadData 在发布带有扩展 ascii 字符的 json 数据时出现 400 Bad Request 错误

Sav*_*tel 2 c# asp.net json webclient webrequest

我正在尝试与 mailchimp 同步联系人。当我在联系方式中扩展了 ascii 字符(例如 (Johéctíóú Diamond))时,它会出现以下错误。

远程服务器返回错误:(400) 错误请求。在 System.Net.WebClient.UploadDataInternal(Uri address, String method, Byte[] data, WebRequest& request) at System.Net.WebClient.UploadString(Uri address, String method, String data) at 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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

它在 webClient.UploadString 方法上引发错误。我应该使用任何替代方法来解决此错误。任何帮助将非常感激。

Nic*_*ins 5

如果 mailchimp 想提供更好的响应,您可以通过以下方式更好地了解调试器输出窗口中的实际错误:

catch (WebException ex)
{
    if (ex.Response != null)
    { 
        string response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
        Debug.WriteLine(response);
    }
}
Run Code Online (Sandbox Code Playgroud)