2017-08-17 97 views
0

我試圖訪問Snipcart API(參考 - https://docs.snipcart.com/api-reference/authentication)。我創建了一個API密鑰,並遵循文檔中提到的步驟。將CURL請求轉換爲C#以訪問Snipcart API返回401未授權

我想將CURL請求轉換爲C#。我選擇使用HttpWebRequest。我從服務器返回401 Unauthorized。我無法弄清楚我的要求有什麼問題。

實際捲曲請求: - 捲曲-H 「接受:應用/ JSON」 https://app.snipcart.com/api/orders -u {API_KEY}:

以下是我試圖上述捲曲請求轉換爲

 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); 
代碼

回答

0

來自Snipcart的API參考說你需要Basic HTTP Authentication

當我看看你的代碼,我想你應該這行

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

改變

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

A類在此topic描述了同樣的問題,你可以採取它作爲參考。

如果它沒有解決問題,您可以仔細看看curl API parameters manual,然後將其轉換爲C#代碼。

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

您需要將頭部作爲基本身份驗證標頭髮送,而不是「API_Key」嘗試類似這樣的操作。

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