从异步方法发送电子邮件

时间:2016-10-27 03:52:22

标签: c# asp.net asp.net-mvc

如果我想立即发送电子邮件,确认新电子邮件,我该怎么办呢? 下面的代码就是我在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 个答案:

答案 0 :(得分:2)

根据您提供的信息,我想问题可能是用户未经过身份验证,因此User.Identity将返回null,因此NullReferenceException

您可以尝试使用您在动作参数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");
}

希望这有帮助!