在我的旧项目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")]
答案 0 :(得分:1)
首先,您不应该这样做。 API通常会返回类似JSON的内容,网络用户将无法使用。如果直接将用户发送到API端点,那么他们在本质上将是死路一条,在浏览网络的上下文中,响应对他们没有意义。
如果API端点中包含用于执行密码重置的逻辑,则您应该执行常规的MVC操作,并将用户发送至该操作。然后,该操作将代表用户与API进行交互,并最终返回他们可以实际与之交互的HTML。