我尝试在Chargify API上验证简单的GET请求。我可能错过了有关如何将凭证传递给服务的详细信息。
我收到以下错误:
"底层连接已关闭:发生意外错误 发送。"
"身份验证失败,因为远程方已关闭 传输流。"
我使用的代码如下:
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扩展程序"高级REST客户端",我使用上面的url执行GET请求,然后chrome在其传统弹出窗口中请求凭据,我把我的api密钥和' x& #39;作为密码,然后我在json中找到了我正在期待的答案。所以我知道api密钥是正确的,我所遗漏的是如何通过请求传递C#中的信息。
在文档中使用curl,他们给出了这个例子:
curl -u api-key:x https://subdomain.chargify.com/customers.xml
你有什么想法,如何在curl中翻译这个-u参数?
谢谢!
修改 正如评论中所建议我尝试使用.NET包装器,但我得到了确切的错误。这是我的代码示例:
var _apiConnection = new ChargifyConnect(url, _userName, _password);
var productList = _apiConnection.GetProductList();
答案 0 :(得分:1)
由于连接刚刚关闭而没有回复,这可能与本周生效的TLS 1.2要求有关。
答案 1 :(得分:0)
我通过明确地将TLS版本设置为1.2来修复此问题。只需在调用Chargify之前添加此代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12