2017-04-19 59 views
0

使用Flurl从API获取响应。在FLUrl中获取响应头c#

var response = await url.WithClient(fc) 
      .WithHeader("Authorization", requestDto.ApiKey) 
      .GetJsonAsync<T>(); 
dynamic httpResponse = response.Result; 

,但我不能能够访问httpResponse.Headers

如何同时使用GetJsonAsync访问响应头。

+0

你关心所有场景中的头文件还是只是错误响应,比如403s?如果是后者,Flurl有一个方便的try/catch模式,您可以在不放弃'GetJsonAsync'的情况下获得响应头。 –

回答

3

您无法从GetJsonAsync<T>获取标题,因为它返回Task<T>而不是原始响应。您可以拨打GetAsync,并在下一步反序列化的有效载荷:

HttpResponseMessage response = await url.GetAsync(); 

HttpResponseHeaders headers = response.Headers; 

FooPayload payload = await response.ReadFromJsonAsync<FooPayload>(); 

ReadFromJsonAsync是一种推广方法:

public static async Task<TBody> ReadFromJsonAsync<TBody>(this HttpResponseMessage response) 
{ 
    if (response.Content == null) return default(TBody); 

    string content = await response.Content.ReadAsStringAsync(); 

    return JsonConvert.DeserializeObject<TBody>(content); 
} 

附:这就是为什么我更喜欢并推荐使用原始HttpClient而不是像RestSharp或Flurl这样的第三方高级客户端。

+0

或者,你可以阅读你选择的第三方库的文档;) – Jamiec

+0

@Jamiec你知道一个好的第三方http客户端库吗? RestSharp被放弃,Flurl强制使用'HttpResponseMessage'来进行低级操作。我真的没有看到Flurl而不是HttpClient的好处。 –

+0

我只写了我自己的用途。它的模型有点简单(有一个流畅的界面,主要作为扩展),因为像你一样,我通常不喜欢这个简单任务的第三方库 - 但我以相当不同的方式执行相同的操作,所以它是有意义的包起来。 – Jamiec