RazorEngine模板-使用RunCompile方法获取视图的模板路径

时间:2019-03-21 11:39:40

标签: c# asp.net email razorengine

我最近在我的网站上实现了重置密码功能,因此必须向用户发送带有重置链接的电子邮件。一切正常,但我在控制器操作中编写了整个电子邮件。为了使它更整洁,我想将电子邮件移到视图中,然后进行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

有人能指出我正确的方向吗?

0 个答案:

没有答案