2016-10-27 2 views
1

Если я пытаюсь отправить электронное письмо сразу, новое письмо было подтверждено, как мне это сделать? Кусок кода ниже - это то, что у меня есть в методе ConfirmEmail. Когда я запускаю код, я получаю Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. по адресу await UserManager.SendEmailAsync(userId, "API", "API Code is: " + user.ApiCode);Отправить электронное письмо от метода async

Я думаю, UserManager.FindById ничего не возвращает, но не уверен, как это сделать.

Любые указатели/идеи помогут.

public async Task<ActionResult> ConfirmEmail(string userId, string code) 
{ 
    if (userId == null || code == null) 
    { 
     return View("Error"); 
    } 
    var result = await UserManager.ConfirmEmailAsync(userId, code); 

    var user = UserManager.FindById(User.Identity.GetUserId()); 
    await UserManager.SendEmailAsync(userId, "API", "API Code is: " + user.ApiCode); 

    return View(result.Succeeded ? "ConfirmEmail" : "Error"); 
} 
+1

Я предполагаю, что Пользователь еще не аутентифицирован, поэтому User.Identity является null и, следовательно, исключает NullReferenceException. Вы пробовали var user = UserManager.FindById (userId); вместо? –

+0

Вы не проверили, является ли 'user' нулевым до его использования. – Adrian

+0

вы отлаживали ?. Как вы реализовали процесс входа пользователя в систему? вы используете свою собственную реализацию MembershipProvider? – jmesolomon

ответ

2

С информацией вы предоставили Я думаю, может быть, проблема в том, что пользователь не прошел проверку подлинности, и поэтому User.Identity возвратит нуль, следовательно, к NullReferenceException.

Вы можете попытаться получить информацию о пользователе с идентификатором, который вы получаете в параметре действия userId.

public async Task<ActionResult> ConfirmEmail(string userId, string code) 
{ 
    if (userId == null || code == null) 
    { 
     return View("Error"); 
    } 
    var result = await UserManager.ConfirmEmailAsync(userId, code); 

    //var user = UserManager.FindById(User.Identity.GetUserId()); 
    var user = UserManager.FindById(userId); //use the received parameter to get the user 
    await UserManager.SendEmailAsync(userId, "API", "API Code is: " + user.ApiCode); 

    return View(result.Succeeded ? "ConfirmEmail" : "Error"); 
} 

Надеюсь, это поможет!