7

使用 Flurl 从 API 获取响应。

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

但我无法访问 httpResponse.Headers

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

4

2 回答 2

8

您无法从中获取标头,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);
}

PS 这就是为什么我更喜欢并建议使用 rawHttpClient而不是任何第三方高级客户端,如 RestSharp 或 Flurl。

于 2017-04-19T07:40:55.973 回答
4

您也可以等待HttpResponseMessage,选择.Headers对象,然后将完成的发送taskReceiveJson<T>反序列化。以下是没有扩展方法的方法:

var task = url.GetAsync();

HttpResponseMessage response = await task;

HttpResponseHeaders headers = response.Headers;

//Get what I need now from headers, .ReceiveJson<T>() will dispose
//response object above.

T obj = await task.ReceiveJson<T>();
于 2018-11-28T07:58:18.317 回答