我正在尝试使用以下命令获取登录用户的SQL结果:
// GET: /Incident/
public ActionResult Index()
{
var loggedInUser = Membership.GetUser().ProviderUserKey.ToString();
var query = from b in db.Logs where b.Id == loggedInUser select b;
return View(query.ToList());
}
但是这个方法的第一行结果是一个NullReferenceException,我不确定为什么?
发布于 2014-02-04 06:56:41
当前用户未登录(或者您的成员资格提供程序不相信该用户已登录),导致GetUser()
方法返回null
,此时您尝试访问ProviderUserKey
,从而导致NullReference
异常。
您需要检查GetUser
是否返回User
或null
,并确定从这一点开始要做什么。您不应该假设GetUser
将返回一个user
对象。
发布于 2014-02-04 10:58:10
您应该在调用该函数之前进行检查,以查看用户是否已通过身份验证。如果您试图在用户实际登录之前访问该页面,则该页面将为空。
If(User.Identity.IsAuthenticated)
{
//then get the users membership information
}
发布于 2014-02-04 07:53:40
使用一些过度防御性的编程,尝试:
public ActionResult Index()
{
if (Membership==null){
throw new ArgumentNullException("Membership");
}
var user = Membership.GetUser();
if (user ==null){
throw new ArgumentNullException("User");
}
var loggedInUser = user.ProviderUserKey.ToString();
if (loggedInUser ==null){
throw new ArgumentNullException("loggedInUser ");
}
var query = from b in db.Logs where b.Id == loggedInUser select b;
return View(query.ToList());
}
https://stackoverflow.com/questions/21539502
复制相似问题