2017-04-19 87 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