我最近在我的网站上实现了重置密码功能,因此必须向用户发送带有重置链接的电子邮件。一切正常,但我在控制器操作中编写了整个电子邮件。为了使它更整洁,我想将电子邮件移到视图中,然后进行RazorEngine模板化。遵循link之后,我似乎已经完成了所有工作,但是在获取视图的模板路径时遇到了困难。
控制器:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByEmailAsync(model.Email);
if (user == null)
{
return Ok();
}
var code = await _userManager.GeneratePasswordResetTokenAsync(user);
var callbackUrl = UrlHelperExtensions.ResetPasswordCallbackLink(user.Id, code);
string templatePath = @"Templates\Email\ResetPasswordEmail.cshtml";
var resetEmailModel = new ResetPasswordEmailViewModel() { FirstName = user.FirstName, LastName = user.LastName, CallbackUrl = callbackUrl };
string emailHtmlBody = RazorEngineService.Create().RunCompile(templatePath, null, resetEmailModel);
await _emailSender.SendEmailAsync(user.Email, "Reset Your Password", emailHtmlBody);
return Ok();
}
return BadRequest();
}
根据我遵循的链接,RunCompile
方法采用到模板的绝对路径。我不能使用GetFullPath
,因为当我发布到IIS时,它不包含非静态文件。
错误:
Please either set a template manager to resolve templates or add the template 'Templates\Email\ResetPasswordEmail.cshtml'!
我的模板的路径是: Project \ Templates \ Email \ ResetPasswordEmail.cshtml
有人能指出我正确的方向吗?