2015-06-25 18 views
5

Próbuję wysyłać żądania i otrzymywać odpowiedzi z MailChimp API. . do tej pory GET, POST i DELETE działają dobrze, jednak PATCH zawsze powoduje, że Bad Request można zidentyfikować błąd w tym kodzie?REST API PATCH 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(); 

błąd occus na linii z request.GetResponse(); jest nieobsługiwany WebException mówiąc Zdalny serwer zwrócił błąd: (400) Bad Request

po sprawdzeniu odpowiedzi błędzie, oto co mówi

"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

Dobrze jest załączyć komunikat o błędzie. – Opal

Odpowiedz

11

Wiele bibliotek C# wydaje się próbować użyć nagłówka Expect: 100-Continue, z którym MailChimp/Akamai ma problem w połączeniu z PATCH. Masz dwie opcje.

  1. Wyłącz Wyłączyć: 100-Kontynuuj w bibliotece HTTP. W jednej bibliotece C# robisz to z linią kodu, taką jak Client.DefaultRequestHeaders.ExpectContinue = False

  2. Tunelowanie żądania PATCH przez HTTP POST przy użyciu nagłówka X-Http-Method-Override. Here's more details on that header.

+0

opcja 2 uratowała mi życie. Dzięki za banda, teraz nie jestem już tak blisko, by ponownie ściągnąć mi włosy –

+3

Opcja 2 mnie uratowała! Dziękuję Ci! Zaimplementowałem to za pomocą: request.Method = WebRequestMethods.Http.Post i request.Headers.Add ("X-Http-Metoda-Override", "PATCH") – DrewF

+0

Opcja 1 zadziałała dla mnie ... wielkie dzięki. .. –

0

Przyczyna PATCH jest całkiem nowy RFC, więc nie spodziewałbyś się, że więcej niż kilka usług w ogóle go wspiera. Lepiej sprawdź, czy usługa go obsługuje.

Wysyłasz żądanie za pomocą formatu json, ale ustaw typ zawartości na "text/plain"?

+0

jak dotąd nie napotkałem żadnych problemów z metodami POST i GET przy użyciu text/plain jako Content type –