从 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 将那个视图(或任何视图)视为 string
但 html
由 Razor
呈现(所以我认为,剃须刀会改变 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 中通过 Razor
将 cshtml
渲染到 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);
如果你想注入一些对象,在第四个参数中传递它
我有模拟 cshtml
看起来像这样:
@model TaskManager.Models.ViewModels.ProjectRaportViewModel
@{
var name = Model.Project.Name;
<h3>@name</h3>
}
<br />
<4h>Hello World!</4h>
我想 return 将那个视图(或任何视图)视为 string
但 html
由 Razor
呈现(所以我认为,剃须刀会改变 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 中通过 Razor
将 cshtml
渲染到 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);
如果你想注入一些对象,在第四个参数中传递它