2017-04-19 24 views
0

APIからの応答を取得するFlurlを使用しました。FLURLのレスポンスヘッダーの取得c#

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

は、しかし、私はGetJsonAsyncを使用しながら、レスポンスヘッダにアクセスする方法httpResponse.Headers

にアクセスすることが傾きます。

+0

は、403sとして、あなたはすべてのシナリオまたは単にエラー応答のヘッダを気にしていますか?後者の場合、Flurlには 'GetJsonAsync'を放棄せずにレスポンスヘッダーを取得できる便利なtry/catchパターンがあります。 –

答えて

3

それは、生の応答の代わりにTask<T>を返すので、あなたはGetJsonAsync<T>からヘッダを取得望めません。あなたはGetAsyncを呼び出して、次のステップであなたのペイロードをデシリアライズすることができます

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

P.S.:

HttpResponseMessage response = await url.GetAsync(); 

HttpResponseHeaders headers = response.Headers; 

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

ReadFromJsonAsyncは、拡張子の方法であり、これはRestSharpやFlurlのようなサードパーティ製の高水準クライアントの代わりにraw HttpClientを使用することを好み、推奨する理由です。

+0

または、選択したサードパーティのライブラリのドキュメントを読むことができます;) – Jamiec

+0

@Jamiecあなたは良いサードパーティのhttpクライアントライブラリを知っていますか? RestSharpは放棄され、Flurlは低レベル操作に 'HttpResponseMessage'を使用しなければなりません。私は本当にHttpClientの代わりにFlurlの利点を見ていません。 –

+0

私は自分のために自分自身を書いた。あなたのように、この単純なタスクのためにサードパーティ製のライブラリが好きではないので、フラッスルで少しモデル化されています(私は一般的に拡張機能として構築されています)。しかし、私は非常にわずかに異なる方法で同じ操作を行います。急いでください。 – Jamiec

関連する問題