REST API PATCH 请求

Posted

技术标签:

【中文标题】REST API PATCH 请求【英文标题】:REST API PATCH request 【发布时间】:2015-09-11 15:18:22 【问题描述】:

我正在尝试发送请求并从 MailChimp API 获取响应。 .到目前为止,GET、POST 和 DELETE 运行良好,但是 PATCH 总是导致 Bad Request 你能识别出这段代码中的错误吗?

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

【问题讨论】:

附上错误信息是个好主意。 【参考方案1】:

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

    在您的 HTTP 库中关闭 Expect: 100-Continue。在一个 C# 库中,您可以使用类似 Client.DefaultRequestHeaders.ExpectContinue = False

    之类的代码行来完成此操作

    使用 X-Http-Method-Override 标头通过 HTTP POST 传输 PATCH 请求。 Here's more details on that header.

【讨论】:

选项 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 中: 【参考方案2】:

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

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

【讨论】:

到目前为止,我在使用 text/plain 作为内容类型的 POST 和 GET 方法方面没有遇到任何问题

以上是关于REST API PATCH 请求的主要内容,如果未能解决你的问题,请参考以下文章

Django REST framework框架之GET, POST, PUT, PATCH, DELETE等API请求接口设计

Spring data-rest:通过 PATCH 请求设置空值

Mailchimp API Put 或 Patch 使用 Delphi REST

Spring Data REST PATCH请求 远程代码执行漏洞案例(CVE-2017-8046)

在 REST API 现实生活场景中使用 PUT 与 PATCH 方法

REST API Patch 调用后如何刷新 v-data-table?