2014-02-03 5 views
2

Я пытаюсь получить результаты SQL для зарегистрированного пользователя с помощью:результаты Membership.GetUser В объекта не задана ссылка на экземпляр объекта

// 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 и я не уверен, почему?

ответ

2

Текущий пользователь не вошел в систему (или ваш поставщик членства не считает, что пользователь вошел в систему), в результате чего GetUser() способ вернуть null, в какой момент вы пытаетесь получить доступ к ProviderUserKey, вызывая NullReference исключение.

Необходимо проверить, что GetUser возвращает User или null и определяет, что с этого делать. Вы не должны предполагать, что GetUser собирается вернуть вам объект user.

+0

Но если пользователь вошел в систему, почему это было бы пустой? – ASPCoder1450

+0

Если пользователь вошел в систему, и ваш поставщик членства сообщает вам, что пользователь НЕ вошел в систему, у вас возникла проблема с самим поставщиком членства. Если это так, вам нужно вернуться к тому, как вы его настроили, и убедитесь, что вся информация верна. –

0

Используя некоторые слишком оборонительный программирования, попробуйте:

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

Он генерирует исключение в GetUser() – ASPCoder1450

+0

Извините за недоразумение, 'Memberhip.GetUser()' является просто примером, в котором вам нужно придерживаться кода, чтобы получить пользователя из БД или другого магазина, который вы используете. – shenku

0

Вы должны проверить перед вызовом, что, чтобы увидеть, если пользователь прошел проверку подлинности. если вы пытаетесь получить доступ к этой странице до того, как пользователь действительно войдет в систему, то это будет null.

If(User.Identity.IsAuthenticated) 
    { 
    //then get the users membership information 
    } 
+0

Как насчет того, если пользователь не прошел аутентификацию? Пользователь вошел в систему в момент, когда я перехожу к этому методу – ASPCoder1450

0

User.Identity.GetUserID является способ получить идентификатор пользователя с помощью ASP.Net MVC 5 AUTH

Смежные вопросы