我想在构造函数
中初始化_applicationUser对象public class ManageController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
private ApplicationDbContext _dbContext;
private ApplicationUser _applicationUser;
public ManageController()
{
_dbContext = new ApplicationDbContext();
_applicationUser = new ApplicationUser();
// the _applicationUser below is always null,
// Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
_applicationUser = _dbContext.Users.Find(User.Identity.GetUserId());
ViewBag.ProfilePhoto = new ProfilePhotoViewModel
{
ProfilePhoto = _applicationUser.ProfilePhoto
};
}
public ActionResult Account()
{
_applicationUser = _dbContext.Users.Find(User.Identity.GetUserId());
ViewBag.ProfilePhoto = new ProfilePhotoViewModel
{
ProfilePhoto = _applicationUser.ProfilePhoto
};
}
但是如果我在构造函数中注释_applicationUser和ViewBag,那么直接浏览到/ Manage / Account一切正常
_applicationUser = _dbContext.Users.Find(User.Identity.GetUserId());
在Account()中有效,但我不知道为什么它在构造函数区域不起作用
答案 0 :(得分:0)
请求上下文在构造函数中不可用,因此没有当前的标识/用户。
答案 1 :(得分:0)
您可以尝试从中获取身份名称
System.Web.HttpContext.Current.User.Identity.Name
。不要与HttpContext
和Controller
的{{1}}混淆; System.Web.HttpContext.Current
- 控制器上下文在构造函数中不会像其他人提到的那样可用。