0

私はこれに本当に慣れていないので、私が尋ねている質問が意味をなさない場合は申し訳ありません。:(

すでにHammockforoAuth(バージョン1.0)認証を使用しているプロジェクトがあります。そして、Shawn Burkeの素晴らしいデータキャッシングフレームワークAgFxを見て、プロジェクト内でそれを使用できるようにしたいと思っています。

しかし、私が抱えている問題は、ハンモックを使用して簡単にリクエストできることです。

var request = new RestRequest
{
    Credentials = _credentials,
    Path = "/fav.xml",
    Method = WebMethod.Post
};

ここで、アクセストークンやコンシューマーキーなどを_credentialsオブジェクトに保存します。そして、それは私にとって魔法のように機能するので、それらを長いoauth署名文字列に変換する必要はありません。

しかし、AgFxの場合、私の理解では、WebLoadRequestを使用してデータを要求する必要があります。これは次のようになります。

return new WebLoadRequest(loadContext, new Uri(myUri), "POST", "post-data");

ここで、「post-data」はoauth署名文字列である必要があります。次に、基本的に、ハンモックから提供されたものを破棄し、署名を取得するためにコードを書き直す必要があります。

これを行うためのより良い方法があるかどうか疑問に思いますか?または、この署名を簡単に取得するために使用できるライブラリがあるかどうかを言う必要がありますか?

どんな助けでも大歓迎です!!

乾杯、

Xin

4

1 に答える 1

3

私はそれを理解しました。

このフレームワークを作成したShawnBurkeは、私に正しい方向を示しました。

基本的に、私が行ったことは、AgFxのLoadRequestを継承するHammockLoadRequestを作成し、Executeオーバーライドで、HttpWebRequestをHammockのRestRequestに置き換えることです。これで完了です。

    public class HammockLoadRequest : LoadRequest
{
    public OAuthCredentials Credentials { get; set; }
    public string AuthorityUrl { get; set; }

    /// <summary>
    /// Create a HammockLoadRequest
    /// </summary>
    public HammockLoadRequest(LoadContext loadContext, OAuthCredentials credentials, string authorityUrl)
        : base(loadContext)
    {
        Credentials = credentials;
        AuthorityUrl = authorityUrl;
    }

    /// <summary>
    /// Performs the actual get for this request.
    /// </summary>
    /// <param name="result"></param>
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
    public override void Execute(Action<LoadRequestResult> result)
    {
        PriorityQueue.AddNetworkWorkItem(
            () =>
            {
                var client = new RestClient
                {
                    Authority = this.AuthorityUrl,
                    HasElevatedPermissions = true
                };

                var restRequest = new RestRequest
                {
                    Credentials = this.Credentials,
                    Path = "/xxx.json",
                };

                restRequest.AddParameter("count", "5");
                restRequest.AddParameter("include_rts", "1");
                //if (sinceId != 0)
                //    request.AddParameter("since_id", sinceId.ToString());

                RestCallback responseHandler = (request, response, userstate) =>
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        Helpers.ShowMessage(String.Format("Error Getting Status: {0}", response.StatusCode));
                        return;
                    }

                    // convert string to stream
                    byte[] bytes = Encoding.UTF8.GetBytes(response.Content);
                    var stream = new MemoryStream(bytes);
                    stream.Close();
                    result(new LoadRequestResult(new MemoryStream(bytes)));
                    return;
                };

                client.BeginRequest(restRequest, responseHandler);
            });
    }
}
于 2011-08-24T13:01:00.187 に答える