用户登录到系统后,我需要在Session中放置一个变量。我与扩展方法这样做:如何获取User.Identity在控制器外的类中工作
登录方法:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
int id = this.HttpContext.GetFirmaId();
String username = this.HttpContext.User.Identity.Name;
//SessionExtensions.SetFirmaId(Session, model.UserName);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
if (User.IsInRole("Administrator"))
{
RedirectToAction("Index", "Admin");
}
else
{
return RedirectToAction("Index", "Home");
}
}
}
else
{
ModelState.AddModelError("", "Brugernavn eller password er forkert.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
扩展方法:
public static int GetFirmaId(this HttpContextBase context)
{
var firmaid = context.Session["firmaid"] as int?;
if (firmaid == null)
{
// Hvis firmaid er røget ud af Session, skal den firmaid som tilhører brugeren hentes
firmaid = SetFirmaId(context.Session, context.User.Identity.Name);
}
return (int)firmaid;
}
的问题是,context.User.Identity.Name
返回一个空字符串。
我该如何解决这个问题?
你打电话给它?你为什么不扩展'HttpContextBase'? – SLaks 2011-12-25 21:01:51
我在我用作帮手的静态类中调用它。我如何使用HttpContextBase?它有Equals和ReferenceEquals方法。 – Kenci 2011-12-25 21:04:03
将它作为参数而不是'HttpSessionStateBase'。 – SLaks 2011-12-25 21:05:44