2015-06-25 150 views
5

我試圖發送請求並從MailChimp API獲取響應。 。到目前爲止,GET,POST和DELETE工作正常,但是,PATCH總是導致錯誤的請求,您可以識別此代碼中的錯誤?REST API 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()行上的錯誤occus行; 是未處理引發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', '{', '['" 
+0

最好附上錯誤信息。 – Opal

回答

11

許多C#庫似乎嘗試使用Expect: 100-Continue標頭,MailChimp/Akamai在與PATCH結合時遇到問題。你有兩個選擇。

  1. 關閉期望:100-繼續在您的HTTP庫中。在一個C#庫,就做到這一點與像Client.DefaultRequestHeaders.ExpectContinue = False

  2. 隧道使用X-Http-Method-Override頭通過HTTP POST的請求PATCH的代碼行。 Here's more details on that header

+0

選項2救了我的命。謝謝一堆,現在我沒地方再拉我的頭髮 –

+3

選項2也救了我!謝謝!我實現這個:request.Method = WebRequestMethods.Http.Post 和 request.Headers.Add(「X-Http-Method-Override」,「PATCH」) – DrewF

+0

選項1爲我工作...非常感謝。 .. –

0

原因PATCH是一個相當新的RFC,所以你不會指望有更多的服務支持它。你最好檢查一下服務是否支持它。

您使用json格式發送請求,但是將內容類型設置爲「text/plain」是可以的嗎?

+0

到目前爲止,我沒有遇到POST和GET方法使用text/plain作爲內容類型 –