REST API PATCH请求

时间:2015-06-25 06:52:32

标签: c# rest mailchimp

我正在尝试发送请求并从MailChimp API获取响应。 。到目前为止,GET,POST和DELETE工作正常,但是PATCH总是会导致错误请求你能否识别出这段代码中的错误?

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', '{', '['"

2 个答案:

答案 0 :(得分:11)

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

  1. 在HTTP库中关闭Expect:100-Continue。在一个C#库中,您可以使用一行代码(例如Client.DefaultRequestHeaders.ExpectContinue = False

  2. )来执行此操作
  3. 使用X-Http-Method-Override标头通过HTTP POST隧道传输PATCH请求。 Here's more details on that header

答案 1 :(得分:0)

原因PATCH是一个非常新的RFC,所以你根本不会期望有更多的服务支持它。如果服务支持,您最好检查一下。

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