POST от Android до службы WCF (OData) - PullRequest
0 голосов
/ 25 марта 2012

Редактировать:

Проведя еще несколько экспериментов, я обнаружил, что запрос будет работать, только если все значения указаны в строке JSON.То есть это не будет работать

{"Text":"test","RatingValue":0.0,"LocationID":5}

, и это будет

{"Text":"test","RatingValue":"0.0","LocationID":"5"}

Я не понимаю, почему.Кажется, что первая строка является допустимой строкой JSON.Это причуда с WCF?

Исходное сообщение

Я пытаюсь опубликовать новый предмет в коллекции с Android.Я продолжаю получать код ответа 400: Плохой запрос.Я не понимаю, что я делаю неправильно, и я надеялся, что кто-то сможет мне помочь.Вот код Java.

HttpURLConnection conn = (HttpURLConnection) uri.toURL().openConnection();
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("User-Agent", userAgent);
conn.setChunkedStreamingMode(0);
conn.setDoInput(true);
conn.setDoOutput(true);

conn.setRequestMethod("POST");
conn.connect();

DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.write(data.getBytes());
out.flush();

int code = conn.getResponseCode();
String message = conn.getResponseMessage();

conn.disconnect();

Данные представляют собой строку JSON, которая выглядит следующим образом:

{"Text":"test","RatingValue":3.0,"ReviewID":0,"LocationID":5}

В этом случае ReviewID является первичным ключом.

URL-адрес запроса указывает на коллекцию рейтингов.Если я вставлю то же место в мой браузер, он успешно запросит коллекцию.Это выглядит примерно так:

http://localhost/DataService.svc/Ratings

1 Ответ

0 голосов
/ 25 марта 2012

попробуйте это:

 HttpClient hc = new DefaultHttpClient();
 HttpPost hp = new HttpPost("http://localhost/DataService.svc/Ratings");
 HttpResponse hr;
 JSONObject jo1 = new JSONObject();
 joobject.put("Text", "test");
 joobject.put("RatingValue", "3.0");
 joobject.put("ReviewID", ".0");
 joobject.put("LocationID", ".5");
 StringEntity se = new StringEntity(joobject.toString(),HTTP.UTF_8);
 se.setContentType("application/json");
 hp.setEntity(se);
 hr = hc.execute(hp);

может быть полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...