我正在尝试访问Snipcart API(参考 - https://docs.snipcart.com/api-reference/authentication)。我创建了一个API密钥,并按照文档中提到的步骤进行操作。
我正在尝试将CURL请求转换为C#。我选择使用HttpWebRequest。我从服务器返回401 Unauthorized。我无法弄清楚我的请求有什么问题。
实际卷曲请求: - 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);
答案 0 :(得分: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");
此topic中描述了一个相同的问题,您可以将其作为参考。
如果它没有解决问题,您可以仔细查看curl API parameters manual,然后将其翻译为C#代码。
curl -H "Accept: application/json" \
https://app.snipcart.com/api/orders \
-u {API_KEY}:
答案 1 :(得分: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);