Использование гамака для вызова API REST Recurly с BasicAuthCredentials

Я пытаюсь вызвать 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 ответ

Решение

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

Другие вопросы по тегам