1

.NET 用の Hammock C# ライブラリを使用して Recurly REST API を呼び出そうとしています。API 呼び出しには、HttpRequest の Authorization ヘッダーが必要です。認証方式は、ヘッダーのユーザー名部分に Base64 でエンコードされた API キーを使用する基本認証です。オブジェクトの Username プロパティにエンコードされたキーを使用して新しい Hammock BasicAuthCredentials オブジェクトを作成し、そのオブジェクトを RestClient または RestRequest オブジェクトの Credentials プロパティに割り当てることができると考えました。ただし、これは送信 HttpRequest で Authorization ヘッダーを生成しないようです。

これらのオブジェクトの 1 つで AddHeader メソッドを使用して Authorization ヘッダーを手動で追加すると、API 呼び出しは成功します。BasicAuthCredentials オブジェクトで Credentials プロパティを使用すると、Recurly から Access Denied エラーが発生します。

これはかなり基本的なことのように思えるので、何か間違ったことをしていることはわかっています。では、Hammock では、RestClient または RestRequest オブジェクトの Credentials プロパティは、Http リクエストで Authorization ヘッダーを作成することになっているのでしょうか?

ハンモックのスーパーユーザーからの助けに感謝します!

失敗するコード:

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 が見つかりました。最初の試行で組み込みの Basic Authorization 実装を使用して Recurly で動作させることができたので、RestSharp を使用して実装します。コードは非常によく似ているため、移行は簡単です。

于 2011-12-30T20:52:41.493 に答える