C# 从异步方法发送电子邮件

C# 从异步方法发送电子邮件,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,如果我想在新邮件确认后立即发送邮件,我该怎么做? 下面的代码是我在ConfirmEmail方法中得到的。当我运行代码时,我会得到异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。在上等待UserManager.SendEmailAsync(用户ID,“API”,“API代码为:”+user.ApiCode) 我认为UserManager.FindById没有返回任何内容,但不确定如何执行 任何建议/想法都会有所帮助 public async T

如果我想在新邮件确认后立即发送邮件,我该怎么做? 下面的代码是我在
ConfirmEmail
方法中得到的。当我运行代码时,我会得到
异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。
上等待UserManager.SendEmailAsync(用户ID,“API”,“API代码为:”+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");
}
公共异步任务确认邮件(字符串userId,字符串代码)
{
if(userId==null | | code==null)
{
返回视图(“错误”);
}
var result=await UserManager.confirmemailsync(userId,code);
var user=UserManager.FindById(user.Identity.GetUserId());
等待UserManager.sendmailasync(userId,“API”,“API代码为:”+user.ApiCode);
返回视图(result.successed?“确认邮件”:“错误”);
}

对于您提供的信息,我想问题可能是用户未经过身份验证,因此
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");
}
公共异步任务确认邮件(字符串userId,字符串代码)
{
if(userId==null | | code==null)
{
返回视图(“错误”);
}
var result=await UserManager.confirmemailsync(userId,code);
//var user=UserManager.FindById(user.Identity.GetUserId());
var user=UserManager.FindById(userId);//使用收到的参数获取用户
等待UserManager.sendmailasync(userId,“API”,“API代码为:”+user.ApiCode);
返回视图(result.successed?“确认邮件”:“错误”);
}

希望这有帮助

我的猜测是,用户尚未通过身份验证,因此User.Identity为null,因此出现了NullReferenceException。您是否尝试过var user=UserManager.FindById(userId);取而代之的是?在使用i是否调试?之前,您没有检查
user
是否为null?。您是如何实现用户登录过程的?您是否正在使用自己的MembershipProvider实现?可能与@KarelTamayo重复?您能否创建一个正确的答案?你的评论帮助解决了问题。谢谢