バックグラウンド:
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 とクラス ライブラリの間でセッションを共有する方法はありますか?
注: 私はこの回答を見ましたが、クラスライブラリでもどのように利用できるかは明確ではありませんでした。