Отправка JSON с использованием httpClient не приходит на сервер
У меня есть этот код:
String json = "{\"name\":\"listFiles\"}";
// Wrap our JSON inside a StringContent which then can be used by the HttpClient class
HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync(endPoint, httpContent).Result;
response.EnsureSuccessStatusCode();
Когда это сообщение закончено, я вижу, что сервер получил вызов, но содержимое пустое (размер содержимого правильный, но у него нет данных).
Я пытался выяснить, есть ли в httpContent данные json, но я не вижу никаких данных.
Зачем этот код, отправлять пустые данные на сервер и почему я не вижу никаких данных внутри httpContent?
Как я могу извлечь json обратно из httpContent, чтобы я мог убедиться, что он правильно инициализирован?
где его содержание?
Edit1
Я проверил сервер, и я получаю эти данные:
POST /osc/command/execute HTTP/1.1
Content-Type: application/json
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: RestSharp/106.2.1.0
Host: 192.168.1.138
Content-Length: 32
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
когда я отправляю данные с помощью библиотеки Restshart следующим образом:
var client = new RestClient("http://192.168.1.138/osc/command/execute");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\n \"name\":\"camera.listFiles\"\n}\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
когда я отправляю тот же код с помощью почтальона, я получаю это на сервере:
POST /osc/command/execute HTTP/1.1
cache-control: no-cache
Postman-Token: 83ecd3ec-a85d-41a6-ab0e-029ee1690cce
Content-Type: application/json
User-Agent: PostmanRuntime/6.3.2
Accept: */*
Host: 192.168.1.138
accept-encoding: gzip, deflate
content-length: 32
Connection: keep-alive
{
"name":"camera.listFiles"
}
так почему в конце пакета, который я читаю, нет ничего с содержимым, которое я разместил?
Редактировать 2
Я разместил данные на " http://httpbin.org/post", и результат, который я получаю:
{
"args": {},
"data": "{\"name\":\"listFiles\"}",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Connection": "close",
"Content-Length": "20",
"Content-Type": "application/json; charset=utf-8",
"Expect": "100-continue",
"Host": "httpbin.org"
},
"json": {
"name": "listFiles"
},
"origin": "91.240.174.154",
"url": "http://httpbin.org/post"
}
Я не вижу здесь никакой полезной нагрузки, но я вижу json с моими данными в нем. Вопрос заключается в том, почему нет полезной нагрузки, как объясняется в этом документе: как параметры отправляются в запросе HTTP POST?
Note1
Что я вижу, так это то, что когда я отправляю сообщение на " http://httpbin.org/post", соединение закрывается, но когда я отправляю сообщение на свой сервер, соединение остается активным, какая разница? Есть ли вероятность того, что я не читаю все данные с клиента на сервере, и я должен ждать другого пакета?
1 ответ
У меня нет репутации, чтобы комментировать ваше сообщение (именно здесь я и хотел разместить этот комментарий - поэтому, пожалуйста, будьте осторожны со мной в отношении отрицательных голосов). Но у нас была проблема, почти такая же, как у вас сегодня. После консультации с коллегой по этому вопросу мы смогли получить отклик JSON, изменив вашу строку:
HttpResponseMessage response = client.PostAsync(endPoint, httpContent).Result;
в
var response = client.PostAsync(endPoint, httpContent).Result.Content.ReadAsStringAsync();
Это показал наш JSON