Недавно я реализовал функцию сброса пароля на моем веб-сайте, и для этого мне пришлось отправить электронное письмо пользователю со ссылкой для сброса. Это все работает нормально, но я написал всю электронную почту в рамках действия контроллера. Чтобы сделать его чище, я захотел переместить письмо в представление и наткнулся на шаблонизатор 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
Кто-нибудь может указать мне правильное направление?