RazorEngine Templating - Получение шаблона пути просмотра в методе RunCompile - PullRequest
0 голосов
/ 21 марта 2019

Недавно я реализовал функцию сброса пароля на моем веб-сайте, и для этого мне пришлось отправить электронное письмо пользователю со ссылкой для сброса. Это все работает нормально, но я написал всю электронную почту в рамках действия контроллера. Чтобы сделать его чище, я захотел переместить письмо в представление и наткнулся на шаблонизатор RazorEngine. Перейдя по этой ссылке Я, кажется, сделал все, но у меня возникают трудности с получением пути шаблона моего представления.

Контроллер:

[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'!

Путь моего шаблона: Проект \ Templates \ Email \ ResetPasswordEmail.cshtml

Кто-нибудь может указать мне правильное направление?

...