2017-08-17 1 views
0

J'essaie d'accéder à l'API Snipcart (Référence - https://docs.snipcart.com/api-reference/authentication). J'ai créé une clé API et suivi les étapes mentionnées dans la documentation. J'essaye de convertir une demande de CURL en C#Conversion de la requête CURL en C# pour l'accès aux retours de l'API Snipcart 401 Non autorisé

J'ai choisi d'utiliser HttpWebRequest. Je reçois 401 non autorisé retourné du serveur. Je ne suis pas en mesure de comprendre ce qui ne va pas avec ma demande.

Curl réelle demande: - boucle -H "Accepter: application/json" https://app.snipcart.com/api/orders -u {api_key}:

Voici le code que j'essayé de convertir la demande de boucle ci-dessus pour

 string baseURL = "https://app.snipcart.com/api/orders"; 

     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseURL); 
     req.AllowAutoRedirect = true; 
     req.ContentType = "application/json"; 
     req.Accept = "application/json"; 
     req.Method = "GET"; 
     req.Headers.Add("API_Key", "MY_API_KEY_VALUE_COMES_HERE"); 

     string jsonResponse = null; 
     using (WebResponse resp = req.GetResponse()) 
     { 
      if (req.HaveResponse && resp != null) 
      { 
       using (var reader = new StreamReader(resp.GetResponseStream())) 
       { 
        jsonResponse = reader.ReadToEnd(); 
       } 
      } 
     } 
     Console.Write(jsonResponse); 

Répondre

0

La référence API de Snipcart indique que vous avez besoin de Basic HTTP Authentication.

Quand je regarde votre code, je pense que vous devriez changer cette ligne

req.Headers.Add("API_Key", "MY_API_KEY_VALUE_COMES_HERE"); 

à

req.Credentials = new NetworkCredential("API_Key", "MY_API_KEY_VALUE_COMES_HERE"); 

Une sorte de la même question est décrit dans ce topic, vous pouvez prendre comme référence.

Si cela ne résout pas le problème, vous pouvez regarder de plus près le curl API parameters manual, puis le traduire en code C#.

curl -H "Accept: application/json" \ 
    https://app.snipcart.com/api/orders \ 
    -u {API_KEY}: 
0

Vous devez envoyer l'en-tête comme en-tête auth basic au lieu de "API_Key" Essayez quelque chose comme ceci.

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseURL); 
req.AllowAutoRedirect = true; 
req.ContentType = "application/json"; 
req.Accept = "application/json"; 
req.Method = "GET"; 
var basicAuthHeader = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("MY_API_KEY_VALUE_COMES_HERE")); 
req.Headers.Add("Authorization", "Basic " + basicAuthHeader);