1

我正在尝试使用适用于 .NET 的 Hammock C# 库调用 Recurly REST API。API 调用需要 HttpRequest 上的 Authorization 标头,并且身份验证方案是基本身份验证,在标头的用户名部分使用 Base64 编码的 API 密钥。我认为我可以使用对象的 Username 属性中的编码键创建一个新的 Hammock BasicAuthCredentials 对象,然后将该对象分配给 RestClient 或 RestRequest 对象的 Credentials 属性。但是,这似乎不会在出站 HttpRequest 上生成授权标头。

如果我在其中一个对象上使用 AddHeader 方法手动添加 Authorization 标头,则 API 调用成功。如果我将 Credentials 属性与 BasicAuthCredentials 对象一起使用,我会从 Recurly 收到拒绝访问错误。

这看起来很基本,所以我知道我做错了什么。那么,在 Hammock 中,RestClient 或 RestRequest 对象上的 Credentials 属性是否应该在 Http 请求上创建 Authorization 标头?

感谢超级 Hammock 用户的任何帮助!

失败的代码:

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


    }
}
4

1 回答 1

0

在没有得到我的问题的答案后,我搜索了 .NET 的替代 Rest 库并找到了 RestSharp。在第一次尝试时,我能够使用其内置的基本授权实现使其与 Recurly 一起使用,因此我将使用 RestSharp 实现。代码看起来非常相似,因此迁移应该很容易。

于 2011-12-30T20:52:41.493 回答