Я делаю запрос POST на маршрут, который возвращает данные JSON.
[HttpPost("api/v1/testGetAll")]
public object Test([FromBody]object filteringOptions)
{
return myService.GetLogs(filteringOptions).ToArray();
}
Маршрут работает нормально, фильтрация работает нормально, и когда я тестирую маршрут в Postman, я получаю правильный ответ. Однако это всего лишь фоновый код, и я хотел бы вызвать этот маршрут из моего пользовательского шлюза API.
Проблема, с которой я столкнулся, - получить точный ответ. Вместо этого я получаю статус успеха, заголовки, версию, запрос сообщения и т.д.
public object TestGetAll(string ApiRoute, T json)
{
Task<HttpResponseMessage> response;
var url = ApiHome + ApiRoute;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
try
{
response = client.PostAsync(url, new StringContent(json.ToString(), Encoding.UTF8, "application/json"));
return response.Result;
}
catch (Exception e)
{
...
}
}
}
Как я могу получить точный контент?
Вы должны прочитать контент из ответа.
var contentString = response.Result.Content.ReadAsStringAsync().Result;
Если вы хотите, вы можете десериализовать ответ строки в объект, который хотите вернуть.
public async Task<TResult> TestGetAll<TResult>(string apiRoute, string json)
{
// For simplicity I've left out the using, but assume it in your code.
var response = await client.PostAsJsonAsync(url, json);
var resultString = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<TResult>(resultString);
return result;
}
Вы должны вернуть ответ как HttpResponseMessage.
Попробуйте изменить оператор возврата на
[HttpPost("api/v1/testGetAll")]
public IHttpActionResult Test([FromBody]object filteringOptions)
{
return Ok(myService.GetLogs(filteringOptions).ToArray());
}
Обратите внимание: это вернет ответ с кодом состояния 200. Если вы хотите обработать ответ на основе другого кода ответа. Вы можете создать HttpResponseMessage, например this-
Request.CreateResponse<T>(HttpStatusCode.OK, someObject); //success, code- 200
Request.CreateResponse<T>(HttpStatusCode.NotFound, someObject); //error, code- 404
T - ваш тип объекта.
И так далее...
IActionResult
? Если это так, он возвращает то же самое