43 votes

Comment s'authentifier avec Rest-client basé sur HttpClient et .net4

J'ai travaillé un peu avec HttpClient pour créer un client de repos. Mais je ne peux pas comprendre, ni trouver d'exemples sur la façon de s'authentifier auprès du serveur. Très probablement, j'utiliserai aut de base, mais vraiment tout exemple serait apprécié.

Dans les versions précédentes (qui ont des exemples en ligne), vous avez fait :

 HttpClient client = new HttpClient("http://localhost:8080/ProductService/");
client.TransportSettings.Credentials =
    new System.Net.NetworkCredential("admin", "admin");

Cependant la TransportSettings n'existe plus dans la version 0.3.0.

102voto

Duncan Smart Points 9195

Tout cela est obsolète. La dernière façon de procéder est la suivante :

 var credentials = new NetworkCredential(userName, password);
var handler = new HttpClientHandler { Credentials = credentials };

using (var http = new HttpClient(handler))
{
    // ...
}

17voto

Darrel Miller Points 56797

La bibliothèque HttpClient n'a pas été intégrée à .Net 4. Cependant, elle est disponible ici http://nuget.org/List/Packages/HttpClient . Cependant, l'authentification est effectuée différemment dans cette version de HttpClient.

 var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization 
                   = new AuthenticationHeaderValue("basic","...");

ou

 var webRequestHandler = new WebRequestHandler();
CredentialCache creds = new CredentialCache();
creds.Add(new Uri(serverAddress), "basic",
                        new NetworkCredential("user", "password"));
webRequestHandler.Credentials = creds;
var httpClient = new HttpClient(webRequestHandler);

Et soyez prévenu, cette bibliothèque va être mise à jour la semaine prochaine et il y a des changements mineurs !

9voto

René Points 4134

J'ai essayé la suggestion de Duncan, mais cela n'a pas fonctionné dans mon cas. Je soupçonne que c'était parce que le serveur avec lequel je m'intégrais n'a pas envoyé de défi ni demandé d'authentification. Il vient de refuser mes demandes, car je n'ai pas fourni d'en-tête d' autorisation.

J'ai donc plutôt fait ce qui suit :

 using (var client = new HttpClient())
{
    var encoding = new ASCIIEncoding();
    var authHeader = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(encoding.GetBytes(string.Format("{0}:{1}", "username", "password"))));
    client.DefaultRequestHeaders.Authorization = authHeader;
    // Now, the Authorization header will be sent along with every request, containing the username and password.
}

Notez que l'exemple ici ne fonctionne qu'avec l' authentification de base .

1voto

ChrisCW Points 31

Pour ce que cela vaut, rien à l'aide de HttpClientHandler n'a fonctionné, du moins pas pour essayer d'effectuer un appel authentifié à l'API CouchDB qui nécessite des informations d'identification d'administrateur de serveur.

Cela a fonctionné pour moi:

 using( var client = new HttpClient() )
{
    var byteArray = Encoding.ASCII.GetBytes("MyUSER:MyPASS");
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
    ....
}

Comme indiqué dans la réponse ici :

Comment utiliser les informations d'identification dans HttpClient en c# ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X