3

バックグラウンド:

ASP.NET セッション状態を使用すると、ユーザーが Web アプリケーションで ASP.NET ページをナビゲートするときに、ユーザーの値を格納および取得できます。これはそのアプリケーションでは機能しますが、そのアプリケーションで参照されているクラス ライブラリがありSession Variables、そのライブラリで必要な場合は、依存性注入を使用していないため、各メソッドに渡す必要があります。

問題:

以下のように Facebook 認証を行うコントローラーがあります。

 public class FacebookController : Controller
    {
        private FacebookGateway FacebookGateway = new FacebookGateway();

        // GET: /Facebook/

        public ActionResult Index()
        {
            string code = Request.QueryString["code"];
            TokenResponse tokenResponse = FacebookGateway.GetTokenResponse(code);
            Session["AccessToken"] = tokenResponse.Access_token;
            return View();
        }

        public ActionResult Friends()
        {

            string accessToken = Session["AccessToken"].ToString();

            WebRequest request = WebRequest.Create(instanceUrl + @"profileUrl-Here");
            request.Method = "GET";
            request.Headers.Add("Some Header " + accessToken);
            WebResponse response = request.GetResponse();
            string str = String.Empty;

            if (response == null)
            {
            }
            else
            {
                using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                    str = sr.ReadToEnd().Trim();

            }
           //Convert str to Model
            return View(model);
        }

ここで、ほぼすべてのメソッドで Facebook Graph API からのデータ アクセスにアクセス トークンが必要ですが、次のように毎回セッションから取得する必要があります。

 var accessToken = Session["AccessToken"].ToString();

コントローラーのすべてのメソッドで使用できるようにするにはどうすればよいですか?

HttpContext.Sessionクラス ライブラリの各メソッド呼び出しを渡さずに、MVC とクラス ライブラリの間でセッションを共有する方法はありますか?

注: 私はこの回答を見ましたが、クラスライブラリでもどのように利用できるかは明確ではありませんでした。

4

1 に答える 1

8

この回答に関連しています(あなたが言及したもの):

セッション ラッパー (つまり、MySessionクラス) をクラス ライブラリに入れることができます。そうすれば、クラス ライブラリのコードでも、Web アプリのコードからでも使用できます。

通常、 を使用すると、どこからでもセッション状態にアクセスできますSystem.Web.HttpContext.Current.Session["AccessToken"]。これは、ラッパー クラスがなくても機能します。

于 2013-08-31T21:08:51.333 に答える