在Asp.Net MVC中,为什么ApplicationUser在我的代码中始终为null

时间:2017-02-03 17:11:32

标签: asp.net-mvc

我想在构造函数

中初始化_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()中有效,但我不知道为什么它在构造函数区域不起作用

2 个答案:

答案 0 :(得分:0)

请求上下文在构造函数中不可用,因此没有当前的标识/用户。

答案 1 :(得分:0)

您可以尝试从中获取身份名称 System.Web.HttpContext.Current.User.Identity.Name。不要与HttpContextController的{​​{1}}混淆; System.Web.HttpContext.Current - 控制器上下文在构造函数中不会像其他人提到的那样可用。