Asp.net mvc 4 登录时存储用户数据

Asp.net mvc 4 登录时存储用户数据,asp.net-mvc-4,Asp.net Mvc 4,我是C和ASP.NET新手,请耐心听我说 我正在创建一个使用2种不同Web服务的网站,希望每个系统都使用用户的个人帐户/api密钥。当用户在我的系统上创建帐户时,我会获取此信息。我希望在用户登录后立即从数据库中检索此信息,并将其存储在会话中,以便我的站点每次调用其中一个API时都可以使用它 我试过: public ActionResult Login(LoginModel model, string returnUrl) { if (ModelState.IsValid &&

我是C和ASP.NET新手,请耐心听我说

我正在创建一个使用2种不同Web服务的网站,希望每个系统都使用用户的个人帐户/api密钥。当用户在我的系统上创建帐户时,我会获取此信息。我希望在用户登录后立即从数据库中检索此信息,并将其存储在会话中,以便我的站点每次调用其中一个API时都可以使用它

我试过:

public ActionResult Login(LoginModel model, string returnUrl)
{
  if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
  {
     SiteEntities SiteDB = new SiteEntities();
     Session["user"] = SiteDB.T_USER.Find(WebSecurity.CurrentUserId);
     return RedirectToLocal(returnUrl);
  }

  // If we got this far, something failed, redisplay form
  //ModelState.AddModelError("", "The user name or password provided is incorrect.");
  ViewBag.WarningMessage = "The user name or password provided is incorrect.";
  return View(model);
}
但是,显然这不起作用,因为此时还没有设置WebSecurity.CurrentUserId


我的问题是,如果我想尽早获取用户的数据,以便在用户的整个访问过程中都可以使用它,那么我应该从哪里检索它呢?

我建议在查找详细信息时使用用户名,而不是用户ID,因此您的代码应该如下所示

public ActionResult Login(LoginModel model, string returnUrl)
{
  if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
  {
     SiteEntities SiteDB = new SiteEntities();
     // ------- updated the below line to use username -------------------------------
     Session["user"] = SiteDB.T_USER.Find(model.UserName);
     return RedirectToLocal(returnUrl);
  }

  // If we got this far, something failed, redisplay form
  //ModelState.AddModelError("", "The user name or password provided is incorrect.");
  ViewBag.WarningMessage = "The user name or password provided is incorrect.";
  return View(model);
}