2016-11-04 4 views
0

Я пытаюсь отправить некоторые данные в REST API. Документация API говорит мне, что я должен использовать PATCH и предоставлять данные как JSON. API также требует oAuth 2.0 для вызова, поэтому я сначала беру маркер доступа и добавляю его к вызову api url.Метод HttpWebRequest PATCH и JSON дает неверный запрос

У меня есть следующий код:

public MyResponse HttpPatch(
     string url, 
     string content, 
     Dictionary<string, string> headers, 
     string contentType = "application/json") 
    { 

     ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

     var request = (HttpWebRequest)WebRequest.Create(Uri.EscapeUriString(url)); 
     if (request == null) 
      throw new ApplicationException(string.Format("Could not create the httprequest from the url:{0}", url)); 

     request.Method = "PATCH"; 
     foreach (var item in headers) 
      request.Headers.Add(item.Key, item.Value); 

     UTF8Encoding encoding = new UTF8Encoding(); 
     var byteArray = Encoding.ASCII.GetBytes(content); 

     request.ContentLength = byteArray.Length; 
     request.ContentType = contentType; 

     Stream dataStream = request.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 

     try 
     { 
      var response = (HttpWebResponse)request.GetResponse(); 
      return new MyResponse(response); 
     } 
     catch (WebException ex) 
     { 
      HttpWebResponse errorResponse = (HttpWebResponse)ex.Response; 
      return new MyResponse(errorResponse); 
     } 
    } 

В блоке попробовать, я получаю сообщение об ошибке на .GetResonse, которая говорит "(400) Bad Request". Значение I обеспечивает методу:

URL = https://api.myserver.com/v1/users/1234?access_token=my_access_token (MyServer и my_access_token имеют реальные значения в моем коде)

содержания = LANG = фр & национальности = FR & страны = FR & first_name = John & last_name = Doe

заголовки = словарь с 1 элемент: { "Authorization", "ApiKey MyUser: MyKey"} (MyUser и MyKey имеют действительные значения в моем коде)

contentType = "application/json"

Есть ли что-то очевидное, что я отсутствую, что может объяснить ошибку «плохого запроса»? Каковы могут быть причины этой ошибки?

Ток доступа, который я использую, верен, URL конечной точки верен. Я не уверен в значении «PATCH» для метода, могу ли я сделать это так? Поскольку документация MSDN не упоминает об этом возможные значения: https://msdn.microsoft.com/nl-be/library/system.net.httpwebrequest.method(v=vs.110).aspx

потянув меня за волосы и изо всех сил в течение 2 дней сейчас, чтобы получить вызов работает, так что, надеюсь, кто-то может показать мне свет дают мне некоторые хорошие указатели положить я на правильном пути?

ответ

0

Получил работу в конце. Оказалось, что мой контент был неправильным, так как я не предоставлял json. После изменения его на «application/x-www-form-urlencoded» и сохранения значения PATCH для метода он работает сейчас.