Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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# RESTAPI补丁请求_C#_Rest_Mailchimp - Fatal编程技术网

C# RESTAPI补丁请求

C# RESTAPI补丁请求,c#,rest,mailchimp,C#,Rest,Mailchimp,我正在尝试发送请求并从MailChimp API获取响应。到目前为止,GET、POST和DELETE都运行良好。然而,补丁总是导致错误请求。您能识别代码中的错误吗 string data = "{\"name\": \"TestListTWOTWOTWO\"}"; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); request.Headers[HttpRequestHeader.Authorization]

我正在尝试发送请求并从MailChimp API获取响应。到目前为止,GET、POST和DELETE都运行良好。然而,补丁总是导致错误请求。您能识别代码中的错误吗

string data = "{\"name\": \"TestListTWOTWOTWO\"}";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Headers[HttpRequestHeader.Authorization] = accessToken;
request.Method = "PATCH";
request.ContentType = "text/plain;charset=utf-8";

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] bytes = encoding.GetBytes(data);
request.ContentLength = bytes.Length;

    using (Stream requestStream = request.GetRequestStream())
    {
        // Send the data.
        requestStream.Write(bytes, 0, bytes.Length);
    }
    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
错误发生在带有request.GetResponse()的行上; 这是一个未处理的WebException,表示远程服务器返回错误:(400)请求错误

检查错误响应后,下面是它所说的

"Your request doesn't appear to be valid JSON:

\nParse error on line 1:\nPATCH /3.0/lists/9bb\n^\n
Expected one of: 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['"

因为
PATCH
是一个全新的RFC,所以您不会期望有更多的服务支持它。你最好检查一下服务是否支持它

您使用json格式发送请求,但将内容类型设置为“text/plain”可以吗?

许多C#库似乎尝试使用
Expect:100 Continue
标题,MailChimp/Akamai在与修补程序结合使用时遇到问题。你有两个选择

  • 关闭Expect:100并在HTTP库中继续。在一个C#库中,您可以使用一行代码来实现这一点,如
    Client.DefaultRequestHeaders.ExpectContinue=False

  • 使用
    X-HTTP-Method-Override
    头通过HTTP POST隧道发送修补程序请求


  • 将错误消息括起来是个好主意。到目前为止,使用text/plain作为内容类型的POST和GET方法没有遇到任何问题。选项2救了我的命。多谢了,现在我再也不想拉扯头发了动作2也救了我!非常感谢。我用:request.Method=WebRequestMethods.Http.Post和request.Headers.Add(“X-Http-Method-Override”、“PATCH”)实现了这一点。我在使用.net system.net.webclient对象时也遇到了问题,我这样解决了:1。在代码中:ServicePointManager.Expect100Continue=False或2。在web.config中: