用户登录系统后,我需要在Session中添加一个变量。我用扩展方法做这个:
登录方式:
[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
返回一个空字符串。
我该如何解决这个问题?
答案 0 :(得分:0)
试
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;
}
更新 - 根据评论:与控制器中的this.HttpContext.GetFirmaId()
一样使用它。
一些有用的链接:
更新2 - 根据评论:
User.Identity.Name
的问题与问题无关 - 上面的答案是如何在Controller之外的类中访问它。
如果OP在调试器中看到它在控制器内部甚至是空的 - 在这种特定情况下 - 我怀疑它在过程中“过早”被访问,因此它确实是空的。
如果您在处理AccountController
时需要帮助,请提出新问题。