web-dev-qa-db-fra.com

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

Je rencontre des problèmes lors de l'utilisation de la classe HttpClient pour accéder à une API Delicious. J'ai le code suivant:

try
{
    const string uriSources = "https://api.del.icio.us/v1/tags/bundles/all?private={myKey}";
    using (var handler = new HttpClientHandler { Credentials = new  
                             NetworkCredential("MyUSER", "MyPASS") })
    {
         using (var client = new HttpClient(handler))
         {
             var result = await client.GetStringAsync(uriSources);
         }
   }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "ERROR...", MessageBoxButton.OK);
}

Lorsque j'exécute le code ci-dessus, j'obtiens ce qui suit: Le code d'état de réponse n'indique pas le succès: 401 (non autorisé).

Alors, comment pourrais-je obtenir ce travail? C'est possible?

Merci d'avance

Cordialement!

22
MikePR

J'ai moi-même eu exactement le même problème. Il semble que le HttpClient ignore simplement les informations d'identification définies dans le HttpClientHandler.

Toutefois, les éléments suivants doivent fonctionner:

using System.Net.Http.Headers; // For AuthenticationHeaderValue

const string uri = "https://example.com/path?params=1";
using (var client = new HttpClient()) {
    var byteArray = Encoding.ASCII.GetBytes("MyUSER:MyPASS");
    var header = new AuthenticationHeaderValue(
               "Basic", Convert.ToBase64String(byteArray));
    client.DefaultRequestHeaders.Authorization = header;

    var result = await client.GetStringAsync(uri);
}

Pas besoin du gestionnaire.

Source: http://www.snip2code.com/Snippet/13895/Simple-C---NET-4-5-HTTPClient-Request-Us

32
Adam Szabo

Ceci est un ancien message, mais j'ai pensé ajouter ma réponse à quelqu'un confronté à un problème similaire et à des réponses de navigation ...

J'ai rencontré un problème similaire. Dans mon cas, la définition de la propriété de domaine pour NetworkCredentials a fonctionné. Vous pouvez essayer de définir le domaine.

1
Nirav Darji

Le code que vous montrez fonctionne pour moi par rapport à une ressource authentifiée. Je soupçonne Delicious de faire quelque chose de bizarre.

Étant donné que vous êtes sur Windows Phone, il est difficile de déboguer avec Fiddler, donc ce que je suggère est d'obtenir un compte Runscope . Installez ce gestionnaire de messages qui redirigera votre demande via le débogueur RunScope. Une fois que vous faites cela, je vous suggère de regarder l'en-tête www-authenticate et d'examiner ce que cela retourne.

Si tout le reste échoue, vous pouvez toujours définir l'en-tête d'authentification directement avec les informations d'authentification de base. Vous n'avez pas besoin d'utiliser la classe Credentials.

0
Darrel Miller