Razor 来自microsoft的任何内置html模板打包程序

Razor 来自microsoft的任何内置html模板打包程序,razor,asp.net-core,razorengine,Razor,Asp.net Core,Razorengine,Razorengine已被用作运行时html打包程序,但维护和支持似乎已停止一年 我已经调查了一些,目前Scriban似乎是合适的人选。 然而,在将其应用于解决方案之前,我想确定微软是否没有自己的库,而不是不保证维护第三方库 或者,我可以只使用razor中最少的必要特性来实现使用razor绑定创建html运行时吗?例如,通过添加一些引用 如果您需要基于ASP.NET核心创建模板服务RazorEngine您可以通过DI获得所有需要的服务: public TemplateService(IRazor

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

我已经调查了一些,目前Scriban似乎是合适的人选。 然而,在将其应用于解决方案之前,我想确定微软是否没有自己的库,而不是不保证维护第三方库


或者,我可以只使用razor中最少的必要特性来实现使用razor绑定创建html运行时吗?例如,通过添加一些引用

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

public TemplateService(IRazorViewEngine viewEngine, IServiceProvider serviceProvider, ITempDataProvider tempDataProvider)
{
    _viewEngine = viewEngine;
    _serviceProvider = serviceProvider;
    _tempDataProvider = tempDataProvider;
}
Startup
类中的
DI
中注册:

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddScoped<ITemplateService, TemplateService>();
    // ...
}
因此,
Controller
中的调用可能如下所示:

var htmlContent = await _templateService.RenderTemplateAsync(
    "Email/MyEmailTemplate",
    new MyEmailTemplateModel
    {
        ToFullName = "Dmitry Pavlov",
        Link = "https://stackoverflow.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
文本将显示呈现的
视图的输出,模型绑定到
Razor
占位符,如此
视图中的@model.ToFullName
。我想你会在模板视图中使用一些布局(我建议将所有需要的
CSS
样式嵌入其中-实际上你可以使用通用的
HTML
标记创建特殊的
\EmailTemplateLayout
文件,并为所有电子邮件模板指定
layout

谢谢你的帮助。你能再给我一点建议吗?我对剃须刀不太熟悉。我相信我当前的VS项目有Microsoft.AspNet.Razor,但它从未配置为MVC项目,更像是一个WEB API项目。在这种情况下,我还需要什么其他配置才能使其与上述代码一起工作?您可以演示如何将此服务添加到现有项目中的示例吗?您需要在
启动中的
DI
中注册模板服务。ConfigureServices
方法如下:services.AddScoped();然后,您可以通过控制器构造函数或其他服务构造函数通过DI注入访问
ITemplateService
var htmlContent = await _templateService.RenderTemplateAsync(
    "Email/MyEmailTemplate",
    new MyEmailTemplateModel
    {
        ToFullName = "Dmitry Pavlov",
        Link = "https://stackoverflow.com/users/804385/dmitry-pavlov",
        SenderName = "Software in healthcare / medical device",
        CustomText = "Thanks for the tip! I have got it now. Appreciate your help!"
    });