2016-01-13 4 views
2

Я пытаюсь выполнить аутентификацию для простого запроса GET в API зарядки. Вероятно, мне не хватает информации о том, как передать учетные данные службе.Не удалось выполнить проверку подлинности в API-интерфейсе Chargify REST

я получил следующее сообщение об ошибке:

"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(); 
} 

Я следую инструкциям по API документации Chargify, вы можете ознакомиться с информацией здесь :

https://docs.chargify.com/api-authentication

https://docs.chargify.com/api-introduction

Использование расширения chrome «Расширенный клиент REST», я делаю запрос GET с указанным выше URL-адресом, затем хром запрашивает учетные данные в своем традиционном всплывающем окне, я добавляю ключ api и «x» в качестве пароля, затем я получить ответ в json за то, что я ожидаю. Поэтому я знаю, что ключ api верен, что мне не хватает, как передать информацию в C# через запрос.

Использование локон в документации, они дают этот пример:

У вас есть какие-либо идеи, как это -u параметр в локон должен быть переведен в C#?

Спасибо!

EDIT Как говорилось в комментарии, я попытался с помощью .NET обертку, но я получаю точную ошибку. Вот мой пример кода:

var _apiConnection = new ChargifyConnect(url, _userName, _password); 
var productList = _apiConnection.GetProductList(); 
+1

Проверьте следующие https://docs.chargify.com/api-code в разделе [Документация] (http://chargify.codeplex.com/documentation) – MethodMan

+0

Я сделал, используя оболочку .NET, я получил ту же ошибку. Я просто добавил образец кода, используя эту оболочку в этом вопросе. – jmecwel

+0

@jmecwel см. Мой комментарий об обертке ниже – djbyter

ответ

1

Поскольку соединение просто закрывается без ответа, это может быть связано с TLS 1.2 требование, вступившего в силу на этой неделе.

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

+0

Awesome !! Действительно, добавив следующее непосредственно перед созданием моего запроса: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; – jmecwel

+0

Вы можете просто установить свойство 'ProtocolType' на' ChargifyConnect' на то же значение - 'SecurityProtocolType.Tls12'. Он делает то же самое, он просто называет это прямо перед фактическим открытием соединения, поэтому нет места для его возврата. – djbyter

+0

@djbyter спасибо, хорошо знаю, я могу использовать обертку, это может сэкономить много работы! – jmecwel

0

Я установил это явно установив версию TLS 1.2. Просто добавьте этот код, прежде чем делать какие-либо вызовы на Chargify:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12