Преобразование HttpResponseMessage в ActionResult в действии прокси-контроллера Dot Net Core

Следующий метод предназначен для приема метода Http и URL-адреса, выполнения метода для URL-адреса и возврата результирующего ответа вызывающей стороне. Он возвращает ActionResult, потому что есть условия ошибки, которые необходимо обработать.

В настоящее время метод только сообщает вызывающей стороне, был ли вызов успешным или нет, он не возвращает сведений об ответе нижестоящего сервера. Я хотел бы, чтобы вызывающий абонент получил весь ответ (включая код состояния, тело ответа и т. д.) от вызова.

Как я могу преобразовать HttpResponseMessage во что-то подходящее для возврата через ActionResult?

    [HttpGet(@"{method}")]
    public async Task<IActionResult> RelayRequest(string method, [FromQuery] string url)
    {

        var httpMethod = new HttpMethod(method);

        Uri uri;
        try
        {
            uri = new Uri(url);
        }
        catch (Exception e)
        {
            return BadRequest("Bad URL supplied: " + e.Message);
        }

        var request = new HttpRequestMessage(httpMethod, uri);

        try
        {
            var response = await _httpClient.SendAsync(request);
            // WANT TO RETURN (ActionResult)response HERE! <<<<<<<<<<

            if (response.IsSuccessStatusCode)
            {
                return Ok();
            }
            return BadRequest(response);
        }
        catch (Exception e)
        {
            return BadRequest(e.Message);
        }

    }

person Larry Lustig    schedule 23.04.2018    source источник
comment
Привет! Вы нашли ответ на этот вопрос? Если да, не могли бы вы помочь мне и опубликовать его, пожалуйста? Спасибо!   -  person PKCS12    schedule 27.07.2018
comment
К сожалению, решения пока нет. Когда я буду на месте с этим клиентом, я попытаюсь обратиться к исходному коду и посмотреть, что я сделал для обходного пути.   -  person Larry Lustig    schedule 27.07.2018
comment
@LarryLustig ты нашел ответ?   -  person LP13    schedule 10.01.2019
comment
Отвечает ли это на ваш вопрос? Преобразование из HttpResponseMessage в IActionResult в .NET Core   -  person Martin    schedule 21.11.2020


Ответы (1)


Это будет немного зависеть от ответа, который вы получаете от своего await _httpClient.SendAsync(request), но вы можете десериализовать ответ Content из запроса и вернуть его из вашего контроллера.

Например, если запрос использует JSON, вы можете сделать следующее:

if (response.IsSuccessStatusCode)
{
    // Assuming the use of Newtonsoft.Json
    var responseBody = JsonConvert.DeserializeObject<RequestResponse>(await response.Content.ReadyAsStringAsync());

    return Ok(responseBody);
}
person willwolfram18    schedule 24.06.2019