无法在Chargify REST API

时间:2016-01-13 18:24:58

标签: c# rest authentication restful-authentication chargify

我尝试在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();

2 个答案:

答案 0 :(得分:1)

由于连接刚刚关闭而没有回复,这可能与本周生效的TLS 1.2要求有关。

https://docs.chargify.com/tls-upgrade-notice

答案 1 :(得分:0)

我通过明确地将TLS版本设置为1.2来修复此问题。只需在调用Chargify之前添加此代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12