从 WebApi Core 将 Razor 视图页面渲染为字符串

Render Razor View Page as string from WebApi Core

我有模拟 cshtml 看起来像这样:

@model TaskManager.Models.ViewModels.ProjectRaportViewModel

@{
    var name = Model.Project.Name;

    <h3>@name</h3>
}
<br />
<4h>Hello World!</4h>

我想 return 将那个视图(或任何视图)视为 stringhtmlRazor 呈现(所以我认为,剃须刀会改变 C# 东西到 html 标签等)。

我有一个 controller 看起来像这样:

    [HttpGet("{projectId}")]
    public IActionResult GetRaportFromProject([FromRoute] int projectId)
    {
        var html = this.pdfService.RenderViewToHtml(projectId);
        return this.Content(html, "text/html", Encoding.UTF8);
    }

pdfService中我有这个方法:

    public string RenderViewToHtml(int projectId)
    {
        this.projectService.GetItem(projectId);

        var raportHtml = what to do next?                   
    }

我的问题是,如何在服务 class 中通过 Razorcshtml 渲染到 html,然后 return 将其渲染为 string来自 WebApi 个端点?

如果您使用 .Net Core,可以轻松安装一个 NuGet 包:RazorEngine.NetCore

文档很好,但这里是简短版本:

包括图书馆:

    using RazorEngine;
    using RazorEngine.Templating;

拿起剃须刀html

        string razorView= "Hello @Model.Name, welcome to RazorEngine!";

如果它在文件中,您可以使用 File.ReadAllText

        string razorView = await File.ReadAllTextAsync(filePath);

并编译:

string result = Engine.Razor.RunCompile(razorView, "templateKey", null, null);

如果你想注入一些对象,在第四个参数中传递它