2

ASP.NET MVC アプリケーションで DotNetOpenAuth を使用して、LinkedIn API とやり取りしようとしています。データベースとの間でトークンを永続化および取得するには、サービス層に IConsumerTokenManager を実装する必要があります。現在、次のようなアクセス トークン (リクエスト トークンではない) のトークン シークレットを取得しています。

public string GetTokenSecret(string token)
{
    // Retrieves token secret from database based on the user's username
    string tokenSecret = _db.LinkedInAccounts.GetTokenSecret(HttpContext.Current.User.Identity.Name);
    return tokenSecret;
}

サービス層で System.Web と HttpContext を参照する必要があるため、これは非常に汚いと感じます。私は本当にこれをしたくありませんが、アクセス トークンを取得する別の方法を決定するのに苦労しています。次のようにアクセス トークンを使用して取得できます。

string tokenSecret = _db.LinkedInAccounts.GetTokenSecret(token);

しかし、アクセス トークンが一意になるかどうか、また、何千ものアクセス トークンが保存されている場合にデータベースのパフォーマンスにどのように影響するかは正確にはわかりません。

これは 2 番目の方法ですか、それともより良い代替手段はありますか? サービス層で System.Web を参照する必要はありません。

ありがとう!

更新:誰かが同様の問題に直面した場合、Ninject を使用して IConsumerTokenManager の実装にユーザー名をコンストラクターパラメーターとして挿入することになりました。

4

1 に答える 1

0

渡されたトークンに基づいてシークレットを検索する必要があります。ログインしたユーザー名ではありません。データベース内のその列にインデックスを設定すると、ルックアップが高速になります。ユーザー名による現在の検索は、とにかく速くはないだろうと思います。

于 2013-03-05T04:13:07.883 に答える