2017-04-19 2 views
0

Utilisé Flurl pour obtenir une réponse de l'API.Obtention de l'en-tête de réponse dans FLUrl C#

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

Mais je ne peux pas accéder httpResponse.Headers

Comment accéder à des en-têtes de réponse lors de l'utilisation GetJsonAsync.

+0

Vous vous souciez des en-têtes dans tous les scénarios ou des réponses aux erreurs, comme les 403? Si ce dernier, Flurl a un modèle pratique d'essai/attrape où vous pouvez obtenir aux en-têtes de réponse sans abandonner 'GetJsonAsync'. –

Répondre

3

Vous ne pouvez pas obtenir un en-tête de GetJsonAsync<T> car il renvoie Task<T> au lieu de la réponse brute. Vous pouvez appeler GetAsync et désérialiser votre charge utile à l'étape suivante:

HttpResponseMessage response = await url.GetAsync(); 

HttpResponseHeaders headers = response.Headers; 

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

ReadFromJsonAsync est une méthode extention:

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

post-scriptum C'est pourquoi je préfère et recommande d'utiliser HttpClient brut au lieu de tout client de haut niveau tiers comme RestSharp ou Flurl.

+0

ou, vous pourriez juste lire la documentation de votre bibliothèque de partie tierce choisie;) – Jamiec

+0

@Jamiec connaissez-vous une bonne bibliothèque cliente de partie tierce? RestSharp est abandonné et Flurl force l'utilisation de 'HttpResponseMessage' pour les opérations de bas niveau. Je ne vois vraiment aucun avantage de Flurl au lieu de HttpClient. –

+0

Je viens d'écrire le mien pour mon usage. Sa modélisation est un peu flurl (a une interface fluide, construite principalement comme des extensions) parce que, comme vous, je n'aime généralement pas les librairies tierces pour cette tâche simple - mais je fais la même opération de manière très légèrement différente envelopper. – Jamiec