Как говорится в моем вопросе, у меня есть AC # web API (MVC.NET web API 2) с контроллером, имеющим метод POST, который получает запрос post (Json String) и просто записывает его в файл журнала (для простоты простоубедившись, что я получил его из Android-приложения).С другой стороны, у меня есть приложение для Android, которое использует Volley для отправки запроса строки сообщения в указанный API.Я использовал пару подходов, таких как использование Stringrequest, запрос JsonObject и т. Д., Но ни один из них, похоже, не работал (я получаю 400 кодов ошибок).Я проверил API в почтальоне, и все в порядке ... Я получаю опубликованную строку в методе API post.Пожалуйста, помогите мне, ребята, или моя работа висит на волоске, если я не смог выполнить эту задачу.Заранее спасибо.Ниже приведен мой код:
Контроллер веб-API
public class TestController : ApiController
{
// POST: api/test
[HttpPost]
[Route("api/test")]
public void Post()
{
string param = Request.Content.ReadAsStringAsync().Result;
EventLogger.writeErrorLog("Posted payload --> " + param)
}
}
Код Android для отправки сообщения
private void postDummy() {
String url = "http://10.0.2.2:1106/api/test";
RequestQueue requestQueue = Volley.newRequestQueue(this);
JSONObject jsonBodyObj = new JSONObject();
try{
jsonBodyObj.put("payload", "XYZ");
}catch (JSONException e){
e.printStackTrace();
}
final String requestBody = jsonBodyObj.toString();
Log.d("Json :--> ", requestBody);
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
url, null, new Response.Listener<JSONObject>(){
@Override public void onResponse(JSONObject response) {
Log.i("Response",String.valueOf(response));
}
}, new Response.ErrorListener() {
@Override public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
}){
@Override
public String getBodyContentType() {
return "application/json";
}
@Override
public byte[] getBody() {
try {
return requestBody == null ? null : requestBody.getBytes("utf-8");
} catch (UnsupportedEncodingException uee) {
VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s",
requestBody, "utf-8");
return null;
}
}
};
requestQueue.add(jsonObjectRequest);
}
Журнал ошибок из Android Studio
D/Json :-->: {"payload":"XYZ"}
E / Volley: [561] BasicNetwork.performRequest: Неожиданный код ответа 400 для http://10.0.2.2:1106/api/test E / Volley: 1 6.onErrorResponse: Ошибка:
Результат теста почтальона Скриншот для результата теста Web API