POST JSON с Rest APi, используя webReuest из WP7 - PullRequest
0 голосов
/ 12 мая 2011

Я обновляю таблицу БД на force.com, используя Rest API. И я публикую данные JSON для обновления таблицы БД, как это.

     // preparing webrequest
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

      // adding request headers
      request.ContentType = "application/json";
      request.Headers["Authorization"] = "OAuth " + token;
      request.Headers["X-PrettyPrint"] = "1";
      // request method
      request.Method = "PATCH";
       // start the asynchronous operation
                request.BeginGetRequestStream(new AsyncCallback(SaveBeginGetRequestStreamCallBack), request);


 private void SaveBeginGetRequestStreamCallBack(IAsyncResult ar)
        {

            HttpWebRequest webRequest = (HttpWebRequest)ar.AsyncState;

            Stream postStream = webRequest.EndGetRequestStream(ar);

            (using (StreamWriter sw = new StreamWriter(postStream))
            {
                 sw.Write(postData);
                // postData is in json format like: {"Name":"Michel"}  
            }

           postStream.close(); 
            webRequest.BeginGetResponse(new AsyncCallback(SaveBeginGetResponseCallback), webRequest);
        }

        private void SaveBeginGetResponseCallback(IAsyncResult ar)
        {

            try
            {
                HttpWebRequest webRequest = (HttpWebRequest)ar.AsyncState;
                HttpWebResponse response;

                // End the get response operation
                response = (HttpWebResponse)webRequest.EndGetResponse(ar);
                Stream streamResponse = response.GetResponseStream();
                StreamReader streamReader = new StreamReader(streamResponse);
                string Response = streamReader.ReadToEnd();
                streamResponse.Close();
                streamReader.Close();
                response.Close();

            }
            catch (WebException e)
            {
                MessageBox.Show(e.Message);
                // Error treatment

            }

Но он показывает ошибку неверного запроса. Это правильный способ отправки в формате JSON через HTTP-запрос.

1 Ответ

1 голос
/ 12 мая 2011

Вы не закрываете / не удаляете postStream до вызова BeginGetResponse ...

Кроме того, вызовите

sw.Write(data);

, так как данные являются строкой.Ваш вызов (передача смещения и счетчика) будет соответствовать байтовому массиву.Вы фактически вызываете перегрузку форматирования http://msdn.microsoft.com/en-us/library/fd857wct(v=VS.96).aspx

...