2016-10-27 8 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);非同期メソッドから電子メールを送信

私は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はまだ認証されていないので、User.Identityはnullなので、NullReferenceExceptionです。あなたはvar user = UserManager.FindById(userId)を試しましたか?代わりに? –

+0

あなたがデバッグした – Adrian

+0

を使用する前に 'user'がヌルかどうかチェックしていませんか?ユーザーサインインプロセスはどのように実装しましたか?独自のMembershipProvider実装を使用していますか? – jmesolomon

答えて

2

は多分問題は、ユーザーが認証されていないため、User.IdentityしたがってNullReferenceException、nullを返しますということです。

代わりに、アクションパラメータuserIdで受け取ったIDのユーザー情報を取得できます。

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"); 
} 

希望します。

関連する問題