创建带有数据的重置密码链接并发送到电子邮件ASP.NET Core Web-API

时间:2019-03-25 14:18:16

标签: asp.net asp.net-web-api asp.net-core

在我的旧项目MVC核心中,我以如下方式创建了用于恢复密码的链接:

if (ModelState.IsValid)
    {
        var user = await _userManager.FindByNameAsync(model.Email);
        if (user == null)
        {
            return View("ForgotPasswordConfirmation");
        }

        var code = await _userManager.GeneratePasswordResetTokenAsync(user);

        var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme);
        MailSend emailService = new MailSend();
        await emailService.SendResetPassword(model.Email, 
            $"for reset password open a link: <a href='{callbackUrl}'>link</a>");
        return RedirectToAction("ForgotPasswordConfirmation", "Account");
    }

有关此部分的问题:var callbackUrl = Url.Action

现在我有用于此方法的API控制器,而不是MVC控制器。如何使用此地址的API控制器数据创建此链接?

[Route("api/account/reset-password")] 

1 个答案:

答案 0 :(得分:1)

首先,您不应该这样做。 API通常会返回类似JSON的内容,网络用户将无法使用。如果直接将用户发送到API端点,那么他们在本质上将是死路一条,在浏览网络的上下文中,响应对他们没有意义。

如果API端点中包含用于执行密码重置的逻辑,则您应该执行常规的MVC操作,并将用户发送至该操作。然后,该操作将代表用户与API进行交互,并最终返回他们可以实际与之交互的HTML。