来自 Microsoft 的任何内置 html 模板打包器

Any in-built html template packager from microsoft

Razorengine 已被用作运行时 html 打包程序,但维护和支持似乎已停止一年。

我研究了一些,目前 Scriban 似乎是合适的人选。 但是,在将其放入解决方案之前,我想确定微软是否没有自己的库,而不是在维护第 3 方库时没有保证。

或者我是否可以只使用 razor 工作的最少必要功能来实现使用 razor 绑定创建 html 运行时?例如,通过添加一些引用..

如果您需要基于 ASP.NET Core RazorEngine 创建模板服务,您可以通过 DI 获得所有需要的服务:

public TemplateService(IRazorViewEngine viewEngine, IServiceProvider serviceProvider, ITempDataProvider tempDataProvider)
{
    _viewEngine = viewEngine;
    _serviceProvider = serviceProvider;
    _tempDataProvider = tempDataProvider;
}

DI 中注册 Startup class:

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddScoped<ITemplateService, TemplateService>();
    // ...
}

然后您可以通过将 ITemplateService 注入 Controller class 或其他服务的构造函数来访问它。并使用 ViewsViewModels 使用 RenderTemplateAsync 方法生成 HTML 请参阅 implementation details here

public async Task<string> RenderTemplateAsync<TViewModel>(string viewFilename, TViewModel viewModel)
{ 
    // ... see the details by the link above
}

因此 Controller 中的调用可能如下所示:

var htmlContent = await _templateService.RenderTemplateAsync(
    "Email/MyEmailTemplate",
    new MyEmailTemplateModel
    {
        ToFullName = "Dmitry Pavlov",
        Link = "https://whosebug.com/users/804385/dmitry-pavlov",
        SenderName = "Software in healthcare / medical device",
        CustomText = "Thanks for the tip! I have got it now. Appreciate your help!"
    });

HTML 文本将渲染 View 的输出,模型绑定到 Razor 占位符,如此 View 中的 @Model.ToFullName。我猜你会为模板视图使用一些布局(我建议将所有需要的 CSS 样式嵌入其中 - 实际上你可以创建带有通用 HTML 标记的特殊 _EmailTemplateLayout 文件并指定这对于您所有的电子邮件模板都是 Layout)。