首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Membership.GetUser导致对象引用未设置为对象的实例

Membership.GetUser导致对象引用未设置为对象的实例
EN

Stack Overflow用户
提问于 2014-02-04 06:52:49
回答 5查看 1.4K关注 0票数 2

我正在尝试使用以下命令获取登录用户的SQL结果:

代码语言:javascript
复制
// 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,我不确定为什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-02-04 06:56:41

当前用户未登录(或者您的成员资格提供程序不相信该用户已登录),导致GetUser()方法返回null,此时您尝试访问ProviderUserKey,从而导致NullReference异常。

您需要检查GetUser是否返回Usernull,并确定从这一点开始要做什么。您不应该假设GetUser将返回一个user对象。

票数 2
EN

Stack Overflow用户

发布于 2014-02-04 10:58:10

您应该在调用该函数之前进行检查,以查看用户是否已通过身份验证。如果您试图在用户实际登录之前访问该页面,则该页面将为空。

代码语言:javascript
复制
If(User.Identity.IsAuthenticated)
    {
    //then get the users membership information
    }
票数 1
EN

Stack Overflow用户

发布于 2014-02-04 07:53:40

使用一些过度防御性的编程,尝试:

代码语言:javascript
复制
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());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21539502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档