2015-06-25 34 views
5

Tôi đang cố gửi yêu cầu và nhận phản hồi từ API MailChimp. . cho đến nay, GET, POST và DELETE đang hoạt động tốt tuy nhiên, PATCH luôn dẫn đến Yêu cầu Xấu có thể bạn xác định được lỗi trong mã này?REST API PATCH yêu cầu

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(); 

occus lỗi trên dòng có yêu cầu.GetResponse(); nó là một WebException unhandled nói Các máy chủ từ xa trở về một lỗi: (400) Bad Request

sau khi kiểm tra phản ứng lỗi, đây là những gì nó nói

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

Tốt nhất nên gửi kèm thông báo lỗi. – Opal

Trả lời

11

Nhiều thư viện C# dường như cố gắng sử dụng tiêu đề Expect: 100-Continue, mà MailChimp/Akamai có vấn đề khi kết hợp với PATCH. Bạn có hai lựa chọn.

  1. Tắt yêu cầu: 100-Tiếp tục trong thư viện HTTP của bạn. Trong một thư viện C#, bạn làm điều đó với một dòng mã như Client.DefaultRequestHeaders.ExpectContinue = False

  2. Đường hầm yêu cầu PATCH thông qua HTTP POST sử dụng tiêu đề X-Http-Method-Override. Here's more details on that header.

+0

tùy chọn 2 đã cứu mạng tôi. Cảm ơn một bó, bây giờ tôi không có ở đâu để kéo tóc của tôi một lần nữa –

+3

Tùy chọn 2 lưu tôi quá! Cảm ơn bạn! Tôi thực hiện điều này với: request.Method = WebRequestMethods.Http.Post và request.Headers.Add ("X-Http-Method-Override", "PATCH") – DrewF

+0

Tùy chọn 1 làm việc cho tôi ... cảm ơn rất nhiều. .. –

0

Nguyên nhân PATCH là một RFC khá mới, vì vậy bạn sẽ không mong đợi rằng sau đó một vài dịch vụ hỗ trợ nó ở tất cả. Bạn nên kiểm tra xem liệu dịch vụ có hỗ trợ nó hay không.

Bạn gửi yêu cầu sử dụng định dạng json, nhưng đặt loại nội dung thành "text/plain" là OK?

+0

cho đến nay, tôi gặp phải không có vấn đề với phương thức POST và GET bằng cách sử dụng văn bản/đồng bằng như kiểu nội dung –

Các vấn đề liên quan