我正在尝试使用适用于 .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();
}
}