当前位置: 首页 > 知识库问答 >
问题:

Razor引擎:在模板中生成URL

聂溪叠
2023-03-14

我有一个ASP。NET核心应用程序,使用身份进行用户管理。

我有一个MailProvider,它准备通过smtp发送电子邮件以用于帐户激活目的:

// ...
var activationMailViewModel = new ActivationMailViewModel()
{
    LastName = user.LastName,
    FirstName= user.FirstName,
    UserName = userName,
    Email = user.Email,
    CompanyName = companyName,
    Url = url.Action("ConfirmEmail", "Account", new { Area = "", code = token, userId = user.Id }, request.Scheme)
};
// ...
var result = Engine.Razor.RunCompile(new LoadedTemplateSource($"Activation", path), "SendUserAccountCreation" + Guid.NewGuid(), null, activationMailViewModel);
// ...

 var mailMessage = new MailMessage(
                new MailAddress("kyc@vente-privee.com", "KYC-vente-privee.com"),
                new MailAddress(user.Email, userName))
            {
                Subject = GetGlobalString("ActivationMail_Subject", cultureCode),
                BodyEncoding = System.Text.Encoding.UTF8,
                SubjectEncoding = System.Text.Encoding.UTF8
            };

<p><a href="@Model.Url" class="button">ACTIVATE MY ACCOUNT</a></p>

然而,由于字符的转录,似乎可以以两种不同的方式解释生成的链接

http://base.url.net/Account/ConfirmEmail?code=CfDJ8PtYvJr8Ve1GnxXJykedIzKTQDg/TXBwV6NmIYMy8Gi7yUbqZagGbZRacKSFrE717h/Gjmm6l8QA3knPPgxyNnM1vxe3wb6KnFsGtZUOMTas7QhX1MW5dE4cU5sorA99Dz03zV8ldVMOMP5BGfUrts2nNQqbs8dNLPNgupdkNzaWa4q6fM5u9E99CzRcFjAn7nnd57Ht3IIREAqz6lqufFYo469+N2VJxmNJJ1p6OAvO6dMJ9M/zdz3xkpBajJbxRw==**

http://base.url.net/Account/ConfirmEmail?code=CfDJ8PtYvJr8Ve1GnxXJykedIzKTQDg/TXBwV6NmIYMy8Gi7yUbqZagGbZRacKSFrE717h/Gjmm6l8QA3knPPgxyNnM1vxe3wb6KnFsGtZUOMTas7QhX1MW5dE4cU5sorA99Dz03zV8ldVMOMP5BGfUrts2nNQqbs8dNLPNgupdkNzaWa4q6fM5u9E99CzRcFjAn7nnd57Ht3IIREAqz6lqufFYo469+N2VJxmNJJ1p6OAvO6dMJ9M/zdz3xkpBajJbxRw==**

这对于my AccountController来说可能有问题:

[Authorize]
public class AccountController : BaseController
{

    // GET: /Account/ConfirmEmail
    [AllowAnonymous]
    public async Task<ActionResult> ConfirmEmail(string code, string userId)
    {
        if (code == null || userId == null)
        {
            return View("Error");
        }

    // Rest of the code... not relevant to the question
}

如果浏览器/邮件客户端解释

例如:

  • 在ProtonMail上:我可以单击的链接指向使用的地址

然而,在这两个电子邮件提供商中,纯文本显示使用Razor引擎生成的url是:<代码>

最好的策略是什么,这样我的用户就不会得到一个不起作用的链接。


共有1个答案

顾文昌
2023-03-14

问题似乎与未应用于电子邮件的原始格式有关。

这里给出的答案是:

在发送电子邮件时,我使用RazorEngine中的RazorEngineService。模板,例如,在我的例子中,它看起来像这样:

using RazorEngine.Templating;

RazorEngineService.Create().RunCompile(html, ...) 

假设您使用的是相同的程序集@Html。此用法中不存在Raw。我

@using RazorEngine.Text

@(new RawString(Model.Variable))
 类似资料:
  • 可供选择好多好多模板引擎, 国人参与的模板引擎,大多都自带了集成类(ViewMaker实现), 本章会挑选几种来演示如何集成 并不存在最好的模板引擎,只有最合适的

  • 具体查看ejs官方文档 https://github.com/mde/ejs

  • 本文向大家介绍ASP.NET Razor模板引擎中输出Html的两种方式,包括了ASP.NET Razor模板引擎中输出Html的两种方式的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET Razor模板引擎中输出Html的两种方式。分享给大家供大家参考,具体如下: Razor中所有的Html都会自动编码,这样就不需要我们手动去编码了(安全),但在需要输出Html时就是已经转义

  • 我们自己实现了一个轻量级的模板引擎,不要问为什么不用smart之类的,因为我们认为没有必要为了一个小小的模板引擎而引入smaart这样复杂的实现。你可能会说,smart功能强大,支持各种标签,标签也是很强大,而且还可以对模板引擎进行各种"灵活"的配置... 这里我们觉得有必要说明一下: 框架的内置模板引擎基本上实现了我们日常开中所有常用的标签。 不常用的标签我们也做了巧妙的实现。 我们只提供了扩展

  • 内置模板引擎 视图的模板文件可以支持不同的解析规则,默认情况下无需手动初始化模板引擎。 可以通过下面的几种方式对模板引擎进行初始化。 配置文件 内置模板引擎的参数统一在配置目录的template.php文件中配置,例如: return [ // 模板引擎类型 支持 php think 支持扩展 'type' => 'Think', // 模板路径 '

  • Warning: The packages listed below may be outdated, no longer maintained or even broken. Listing here does not constitute an endorsement or recommendation from the Expressjs project team. Use at your