2017-02-03 115 views
1

我想初始化_applicationUser对象在构造函数中在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在构造函数然后浏览直接/管理/账号一切正常

_applicationUser = _dbContext.Users.Find(User.Identity.GetUserId()); 

确实在账户工作(),但我不知道为什么它不会在构造区域

+0

User.Identity.GetUserId()返回什么?调试101,始终确保一切都有你认为它应该有的价值。 –

+0

由于httpcontext在控制器初始化时尚未可用。由于httpcontext是持有用户,那么用户尚不可用 – Nkosi

+0

@Nkosi - 有趣...想知道我如何获得我的自定义授权属性中的上下文和用户声明!也在我的基础控制器构造函数。 'System.Web.HttpContext.Current.User' – Developer

回答

0

请求C工件ontext在构造函数中不可用,所以没有当前的身份/用户。

+0

你确定吗?是什么让你认为请求上下文在构造函数中不可用? – Developer

+0

@Developer,httpcontext在控制器初始化时还不可用。由于httpcontext是持有用户的用户,因此用户尚不可用 – Nkosi

+0

但是,在用户数据权限的每个操作中查询数据库并不明智,这就是为什么我需要在构造函数中设置以便它可用于其余的方法。任何想法我怎么能在构造函数中做到这一点? –

0

您可以尝试从 System.Web.HttpContext.Current.User.Identity.Name获取标识名称。不要混淆ControllerSystem.Web.HttpContext.CurrentHttpContext; Controller.HttpContext - 控制器上下文在其他人提到的构造函数中不可用。

相关问题