【发布时间】:2011-12-22 22:22:07
【问题描述】:
我正在尝试使用适用于 .NET 的 Hammock C# 库调用 Recurly REST API。 API 调用需要 HttpRequest 上的 Authorization 标头,并且身份验证方案是基本身份验证,在标头的用户名部分使用 Base64 编码的 API 密钥。我认为我可以使用对象的 Username 属性中的编码键创建一个新的 Hammock BasicAuthCredentials 对象,然后将该对象分配给 RestClient 或 RestRequest 对象的 Credentials 属性。但是,这似乎不会在出站 HttpRequest 上生成 Authorization 标头。
如果我在其中一个对象上使用 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();
}
}
【问题讨论】:
-
我发现 RestSharp 作为使用 Hammock 的替代方案,并且在第一次尝试时我就能够非常快速地将其基本授权方法与 Recurly 一起使用。因此,我不会在我的项目中使用 Hammock。
标签: asp.net rest basic-authentication hammock