1

我正在尝试访问 Snipcart API(参考 - https://docs.snipcart.com/api-reference/authentication)。我创建了一个 API 密钥并按照文档中提到的步骤进行操作。

我正在尝试将 CURL 请求转换为 C#。我选择使用 HttpWebRequest。我从服务器返回 401 Unauthorized。我无法弄清楚我的请求有什么问题。

实际卷曲请求:- curl -H“接受:应用程序/json” https://app.snipcart.com/api/orders -u {API_KEY}:

以下是我尝试将上述 curl 请求转换为的代码

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

2 回答 2

1

您需要将标头作为基本身份验证标头而不是“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);
于 2017-08-17T20:02:27.237 回答
1

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

本主题描述了一种相同的问题,您可以作为参考。

如果它没有解决问题,您可以仔细查看curl API 参数手册,然后将其转换为 C# 代码。

curl -H "Accept: application/json" \
  https://app.snipcart.com/api/orders \
  -u {API_KEY}:
于 2017-08-17T19:53:50.830 回答