从 Flurl HttpResponseMessage 获取响应 body

Get response body from Flurl HttpResponseMessage

我正在为休息 API 进行一些自动监视 运行,我需要从 HttpResponseMessage object 检索响应 body。 我正在使用 Flurl Http:https://flurl.dev/docs/fluent-http/

我知道如何通过在 http 请求末尾添加“.RecieveSomeForm()”来检索响应body,但我还需要获得响应 header,因为来自 Rest API 的错误代码作为 header 发回。我的问题是 - 据我所知和我尝试过的 - 它只是我可以从中检索 header 的 HttpResponseMessage object。所以问题是: 如何从 HttpResponseMessage 中获取响应 body,同时仍然能够检索 header 以进行错误记录?

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);

}

如果我没理解错的话,您需要 HTTP 响应中的 Headers + Response body。

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 上使用。 (这就是为什么你必须避免在第一行代码中等待)