C # .NET web api возврат из почтового запроса

2

Я делаю запрос 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)
            {
                ...
            }
        }
    }

Как я могу получить точный контент?

Теги:

2 ответа

2
Лучший ответ

Вы должны прочитать контент из ответа.

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;
}
  • 0
    Я знаю, что это старо, но светло-серый, указывающий на то, что употребление пропущено, делает его трудным для некоторых из нас. Я проголосовал, хотя, потому что это помогло :) .. много
1

Вы должны вернуть ответ как 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 - ваш тип объекта.

И так далее...

  • 0
    Вы имеете в виду IActionResult ? Если это так, он возвращает то же самое
  • 0
    Вы десериализовали ответ обратно в массив? Также покажите контент, который вы получаете в Почтальоне.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню