Получите тело ответа от Flurl HttpResponseMessage - PullRequest
1 голос
/ 21 июня 2019

Я выполняю автоматическое наблюдение за запущенным Rest API, и мне нужно получить тело ответа из объекта HttpResponseMessage.Я использую Flurl Http: https://flurl.dev/docs/fluent-http/

Я знаю, как получить ответное тело, добавив ".RecieveSomeForm ()" в конце запроса http, но мне также нужно получить заголовки ответа, как ошибкукод из Rest API отправляется обратно в виде заголовка.Моя проблема в том, что - насколько мне известно и что я пробовал - это только объект HttpResponseMessage, из которого я могу получить заголовки.Итак, вопрос таков: как мне вывести ответчик из HttpResponseMessage, при этом все еще имея возможность получать заголовки для регистрации ошибок?

using (var cli = new FlurlClient(URL).EnableCookies())
{

//get response body - var is set to string and has only response body

var AsyncResponse = await cli.WithHeader("some header").Request("some end point").AllowAnyHttpStatus().PostJsonAsync(some body).ReceiveString();
Console.WriteLine(AsyncResponse);



//get headers - var is set to HttpResponseMessage

var AsyncResponse = await cli.WithHeader("some header").Request("some end point").AllowAnyHttpStatus().PostJsonAsync(some body);
Console.WriteLine(AsyncResponse.Headers);

}

1 Ответ

3 голосов
/ 21 июня 2019

Если я правильно понял, вам нужен заголовок + тело ответа из HTTP-ответа.

var response = await cli.WithHeader("some header").Request("some end point").AllowAnyHttpStatus().PostJsonAsync("some body");

var headers = response.Headers; //do your stuff
var responseBody = response.Content != null ? await response.Content.ReadAsStringAsync() : null;

Еще один вариант, который мне лично не нравится:

 var responseTask = cli.WithHeader("some header", "haha").Request("some end point").AllowAnyHttpStatus().PostJsonAsync("some body");

 var headers = (await responseTask).Headers; //do your stuff
 var responseBody = await responseTask.ReceiveString();

К сожалению, то есть методы расширения Flurl могут использоваться на Task, а не на HttpResponseMessage.(вот почему вы должны избегать ожидания в первой строке кода)

...