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

时间:2019-06-08 05:09:40

标签: c# asp.net-web-api asp.net-core razor asp.net-core-2.1

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

@model TaskManager.Models.ViewModels.ProjectRaportViewModel

@{
    var name = Model.Project.Name;

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

我想以string的形式返回该视图(或任何视图),但以html呈现的Razor的形式返回(因此,我认为剃刀会将C#的内容更改为{{ 1}}标签等)。

我有一个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? } cshtml渲染到html,然后从Razor端点将其作为string返回? >

1 个答案:

答案 0 :(得分:2)

如果使用.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);

如果要注入一些对象,请将其传递给第4个参数