Я пытаюсь вызвать 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();
}
}