2017-08-10 1 views
0

J'ai une classe qui se connecte à une API Web, donc je suis INITIALISATION un HTTPClient statique en haut de la classe comme celui-ciauthentification Manipulation à l'aide HTTPClient

private static readonly HttpClient httpClient = new HttpClient(); 

https://docs.microsoft.com/enus/azure/architecture/antipatterns/improper-instantiation/

Ce HTTPClient est utilisé par tous méthodes publiques dans la classe pour contacter l'API, chaque méthode sauf login() nécessite un en-tête d'authentification de base, cet en-tête doit être au format:

Autorisation: Basic device_id: X-Secret-Key

Où device_id est une constante pour cette instance de la classe et la clé secrète un retour de la méthode login().

toutes les méthodes doivent contenir:

request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo))); 

Où demande est en cours de création et HTTPRequestMessage authInfo est une chaîne dans le format device_id: X-Secret-Key.

Ou si un chaque méthode appeler un séparé HTTPClient de celui utilisé par le Login() fonction, déclarée comme:

var handler = new HttpClientHandler(); 
handler.Credentials = new NetworkCredential (device_id, secret_key); 
var client = new HttpClient (handler); 

Merci pour toutes les réponses

Répondre

0

L'en-tête d'autorisation, ajoutez-le à httpClient:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo))); 

Après avoir ajouté cet en-tête une fois, tous les futurs appels au service API WEB doivent être autorisés.

+0

Que fait le paramètre support? –

+0

Oups, "de base", pas "porteur". J'ai édité ma réponse –