从Flurl HttpResponseMessage获取响应主体

时间:2019-06-21 06:26:29

标签: c# flurl

我正在对运行中的Rest API进行一些自动监视,我需要从HttpResponseMessage对象检索响应主体。 我正在使用Flurl Http:https://flurl.dev/docs/fluent-http/

我知道如何通过在http请求的末尾添加“ .RecieveSomeForm()”来检索响应体,但是我还需要获取响应头,因为来自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 个答案:

答案 0 :(得分:3)

如果我正确理解,则需要HTTP响应中的Headers + Response正文。

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