Преобразование запроса CURL в C# для доступа к API Snipcart возвращает 401 Несанкционированный

Я пытаюсь получить доступ к API Snipcart (ссылка - https://docs.snipcart.com/api-reference/authentication). Я создал ключ API и выполнил действия, указанные в документации.

Я пытаюсь преобразовать запрос CURL в C#. Я решил использовать HttpWebRequest. Я получаю 401 Несанкционированный возврат с Сервера. Я не могу понять, что не так с моей просьбой.

Фактический запрос Curl: - curl -H "Принять: application / 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);

2 ответа

Вам нужно отправить заголовок как основной заголовок аутентификации вместо "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);

Справочник по API от Snipcart говорит, что вам нужна базовая HTTP-аутентификация.

Когда я смотрю на ваш код, я думаю, что вы должны изменить эту строку

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}:
Другие вопросы по тегам