Использование гамака для вызова API REST Recurly с BasicAuthCredentials - PullRequest
1 голос
/ 23 декабря 2011

Я пытаюсь вызвать Recurly REST API с помощью библиотеки Hammock C # для .NET. Для вызовов API требуется заголовок Authorization в HttpRequest, а схема аутентификации - обычная аутентификация с закодированным в Base64 ключом API в части имени пользователя в заголовке. Я подумал, что мог бы создать новый объект Hammock BasicAuthCredentials с закодированным ключом в свойстве Username объекта, а затем назначить объект свойству Credentials объектов RestClient или RestRequest. Однако, похоже, это не создает заголовок авторизации для исходящего запроса HttpRequest.

Если я добавлю заголовок Authorization вручную, используя метод AddHeader для одного из этих объектов, вызов API будет успешным. Если я использую свойство Credentials с объектом BasicAuthCredentials, я получаю сообщение об отказе в доступе от Recurly.

Это кажется довольно простым, так что я знаю, что делаю что-то не так. Итак, в Hammock, свойство Credentials объекта RestClient или RestRequest должно создавать заголовок Authorization для запроса Http?

Спасибо за любую помощь от супер-пользователя гамака!

Код, который не работает:

class Program
{
    public static void Main(string[] args)
    {

        string encodedAPIKey = Convert.ToBase64String(Encoding.UTF8.GetBytes("APIKeyHere"));
        BasicAuthCredentials credentials = new BasicAuthCredentials
        {
            Username = encodedAPIKey
        };

        RestClient client = new RestClient
        {
            Authority = "https://api.recurly.com",
            VersionPath = "v2"
        };

        client.AddHeader("Accept", "application/xml");

        RestRequest request = new RestRequest
        {
            Credentials = credentials,
            Path = "plans"

        };

        RestResponse response = client.Request(request);

        Console.WriteLine(response.Content);
        Console.ReadLine();


    }
}

Успешный код:

class Program
{
    public static void Main(string[] args)
    {

        string encodedAPIKey = Convert.ToBase64String(Encoding.UTF8.GetBytes("APIKeyHere"));

        RestClient client = new RestClient
        {
            Authority = "https://api.recurly.com",
            VersionPath = "v2"
        };

        client.AddHeader("Accept", "application/xml");
        client.AddHeader("Authorization", "Basic " + encodedAPIKey);

        RestRequest request = new RestRequest
        {
            Path = "plans"

        };

        RestResponse response = client.Request(request);

        Console.WriteLine(response.Content);
        Console.ReadLine();


    }
}

1 Ответ

0 голосов
/ 31 декабря 2011

Не получив ответов на мой вопрос, я выполнил поиск альтернативных библиотек Rest для .NET и нашел RestSharp.Мне удалось заставить его работать с Recurly, используя встроенную реализацию Basic Authorization с первой попытки, поэтому я буду реализовывать с использованием RestSharp.Код выглядит очень похоже, поэтому миграция должна быть простой.

...