Визуализация Razor View Page в виде строки из WebApi Core - PullRequest
0 голосов
/ 08 июня 2019

У меня есть макет cshtml, который выглядит так:

@model TaskManager.Models.ViewModels.ProjectRaportViewModel

@{
    var name = Model.Project.Name;

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

Я хочу вернуть это представление (или любое другое) как 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?                   
    }

У меня вопрос, как отрендерить cshtml в html на Razor в классе обслуживания, а затем вернуть его как string из WebApi конечной точки?

1 Ответ

2 голосов
/ 08 июня 2019

Если вы используете .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-м аргументе

...