无法在 Chargify REST 上进行身份验证 API
Unable to authenticate on Chargify REST API
我正在尝试对 Chargify API 上的简单 GET 请求进行身份验证。我可能遗漏了有关如何将凭据传递给服务的详细信息。
我收到以下错误:
"The underlying connection was closed: An unexpected error occurred on
a send."
"Authentication failed because the remote party has closed the
transport stream."
我使用的代码如下:
const string url = "https://subdomain.chargify.com/subscriptions.json";
var request = (HttpWebRequest)WebRequest.Create(url);
string auth = Convert.ToBase64String(Encoding.ASCII.GetBytes("apikey:x"));
request.Headers[HttpRequestHeader.Authorization] = "Basic " + auth;
WebResponse response = request.GetResponse(); //THROW ERROR
using (Stream responseStream = response.GetResponseStream())
{
var reader = new StreamReader(responseStream, Encoding.UTF8);
return reader.ReadToEnd();
}
我正在按照 Chargify API 文档中的说明进行操作,您可以在此处查阅信息:
https://docs.chargify.com/api-authentication
https://docs.chargify.com/api-introduction
使用 chrome 扩展 "Advanced REST Client",我用上面的 url 做了一个 GET 请求,然后 chrome 在它的传统弹出窗口中请求凭证,我把我的 api 密钥和 'x' 作为密码,然后我在 json 中得到了我所期望的答案。所以我知道 api 键是正确的,我缺少的是如何通过请求在 C# 中传递信息。
在文档中使用 curl,他们给出了这个例子:
curl -u api-key:x https://subdomain.chargify.com/customers.xml
您知道 curl 中的这个 -u 参数应该如何在 C# 中翻译吗?
谢谢!
编辑
正如评论中所建议的那样,我尝试使用 .NET 包装器,但我得到了确切的错误。这是我的代码示例:
var _apiConnection = new ChargifyConnect(url, _userName, _password);
var productList = _apiConnection.GetProductList();
由于连接刚刚关闭而没有回复,这可能与本周生效的 TLS 1.2 要求有关。
我通过将 TLS 版本明确设置为 1.2 来修复此问题。只需在调用 Chargify 之前添加此代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
我正在尝试对 Chargify API 上的简单 GET 请求进行身份验证。我可能遗漏了有关如何将凭据传递给服务的详细信息。
我收到以下错误:
"The underlying connection was closed: An unexpected error occurred on a send."
"Authentication failed because the remote party has closed the transport stream."
我使用的代码如下:
const string url = "https://subdomain.chargify.com/subscriptions.json";
var request = (HttpWebRequest)WebRequest.Create(url);
string auth = Convert.ToBase64String(Encoding.ASCII.GetBytes("apikey:x"));
request.Headers[HttpRequestHeader.Authorization] = "Basic " + auth;
WebResponse response = request.GetResponse(); //THROW ERROR
using (Stream responseStream = response.GetResponseStream())
{
var reader = new StreamReader(responseStream, Encoding.UTF8);
return reader.ReadToEnd();
}
我正在按照 Chargify API 文档中的说明进行操作,您可以在此处查阅信息:
https://docs.chargify.com/api-authentication
https://docs.chargify.com/api-introduction
使用 chrome 扩展 "Advanced REST Client",我用上面的 url 做了一个 GET 请求,然后 chrome 在它的传统弹出窗口中请求凭证,我把我的 api 密钥和 'x' 作为密码,然后我在 json 中得到了我所期望的答案。所以我知道 api 键是正确的,我缺少的是如何通过请求在 C# 中传递信息。
在文档中使用 curl,他们给出了这个例子:
curl -u api-key:x https://subdomain.chargify.com/customers.xml
您知道 curl 中的这个 -u 参数应该如何在 C# 中翻译吗?
谢谢!
编辑 正如评论中所建议的那样,我尝试使用 .NET 包装器,但我得到了确切的错误。这是我的代码示例:
var _apiConnection = new ChargifyConnect(url, _userName, _password);
var productList = _apiConnection.GetProductList();
由于连接刚刚关闭而没有回复,这可能与本周生效的 TLS 1.2 要求有关。
我通过将 TLS 版本明确设置为 1.2 来修复此问题。只需在调用 Chargify 之前添加此代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12