Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebClient UploadData在发布带有扩展ascii字符的json数据时出现400错误请求错误_C#_Asp.net_Json_Webclient_Webrequest - Fatal编程技术网

C# WebClient UploadData在发布带有扩展ascii字符的json数据时出现400错误请求错误

C# WebClient UploadData在发布带有扩展ascii字符的json数据时出现400错误请求错误,c#,asp.net,json,webclient,webrequest,C#,Asp.net,Json,Webclient,Webrequest,我正在尝试与mailchimp同步联系。当我在联系人详细信息中扩展了ascii字符,例如(JohéctíóúDiamond),它会给出以下错误 远程服务器返回错误:(400)请求错误。 位于System.Net.WebClient.UploadDataInternal(Uri地址、字符串方法、字节[]数据、WebRequest和request) 位于System.Net.WebClient.UploadString(Uri地址、字符串方法、字符串数据) 在DealCloud.WinService

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

远程服务器返回错误:(400)请求错误。 位于System.Net.WebClient.UploadDataInternal(Uri地址、字符串方法、字节[]数据、WebRequest和request) 位于System.Net.WebClient.UploadString(Uri地址、字符串方法、字符串数据) 在DealCloud.WinServices.MailChimp.MailChimpHelper.AddListMemberSimp(MailChimpServiceContext,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();
        }

    }
内部虚拟字符串AddListMembersImpl(mailServiceContext上下文,字符串listId,列表toAdd)
{
如果(!(toAdd?Any()?false))返回null;
var uri=string.Format(“{0}/batches”,context.Url/*,listId*/);
使用(var webClient=new webClient())
{
添加(“接受”、“应用程序/json”);
webClient.Headers.Add(“Authorization”,“apikey”+context.apikey);
//变量路径=$“列表/{listId}/members”;
var-toSer=new{operations=toAdd.Select(x=>new{method=“POST”,path=$“lists/{listId}/members”,body=JsonConvert.SerializeObject(new{email\u address=x.email,status=x.status,merge\u fields=x.MergeFields})};
var data=JsonConvert.SerializeObject(toSer,新的JsonSerializerSettings{DefaultValueHandling=DefaultValueHandling.Ignore});
var ret=webClient.UploadString(uri,“POST”,数据);
var o=JObject.Parse(ret);
返回o[“id”]?.ToString();
}
}
它在webClient.UploadString方法上引发错误。是否有其他方法可以解决此错误。
任何帮助都将不胜感激

您很可能只需要指定UTF8编码

webClient.Encoding = Encoding.UTF8;
如果未指定编码,则WebClient将根据为您的系统使用默认编码


大概这不符合MailChimp。

您很可能只需要指定UTF8编码

webClient.Encoding = Encoding.UTF8;
如果未指定编码,则WebClient将根据为您的系统使用默认编码


这可能与MailChimp不一致。

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

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

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

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

更新了粗体文本中的错误消息更新了粗体文本中的错误消息在我的例子中,我还需要添加:wc.Headers.add(HttpRequestHeader.Accept,“application/json”);在我的例子中,我还需要添加:wc.Headers.add(HttpRequestHeader.Accept,“application/json”);