Движок генерации представлений Razor — это очень удобный инструментом для создания HTML разметки, однако возможности данного движка обычно используются только для генерации веб-страниц. В этой статье я бы хотел затронуть сторону использования движка генерации представлений Razor в целях получения HTML строки для дальнейшего использования.
Первым, приходящим на ум, способ использования — это отправка электронной почты содержащей HTML контент, данный способ использования будет рассмотрен в другой статье, а сегодня я бы хотел рассказать о созданной мною библиотеке ServicesLibrary.RazorViewRendering. Предлагаемая мною библиотека является очень простой в использовании и содержит минимальное количество функций. Далее рассмотрим процесс подключения библиотеки и ее использования.
Подключение сервиса генерации представлений Razor (Startup.cs):
1 2 3 4 5 6 |
public void ConfigureServices(IServiceCollection services) { services.AddViewRenderer(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); } |
Создадим простейшую модель данных HelloWorldModel:
1 2 3 4 |
public class HelloWorldModel { public string Name { get; set; } } |
На основе имеющейся модели данных HelloWorldModel создадим представление HelloWorldModel.cshtml:
1 2 3 |
@model ServicesLibrarySample.Models.HelloWorldModel <h1 style="text-align:center">Hello @(Model.Name)</h1> |
Приступим к заключительному этапу, подключение сервиса в контроллер и генерация представления. Ниже представлен класс контроллера ValuesController:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[Route("api/values")] [ApiController] public class ValuesController : ControllerBase { private readonly IRazorViewToStringRenderer _razorRenderer; public ValuesController(IRazorViewToStringRenderer razorRenderer) { _razorRenderer = razorRenderer; } [HttpGet] public async Task<IActionResult> Get() { return Ok( await _razorRenderer.RenderViewToStringAsync( viewName: "/Pages/HelloWorld.cshtml", model: new HelloWorldModel { Name = "Nikita" })); } } |
При обращении по адресу /api/value, будет выполнен Get метод контроллера ValuesController, который возвратит HTML код, образованный при генерации Razor представления HelloWorld.cshtml c моделью HelloWorldModel, в которой параметр Name имеет значение «Nikita».
Произведем запрос через программу Postman и включим режим Preview.
Генерация HTML с использованием встроенного движка представлений Razor является на мой взгляд наиболее оптимальной, а задействовать его возможности для получения HTML строки позволяет библиотека ServicesLibrary.RazorViewRendering.
Спасибо за внимание, надеюсь предложенная мною библиотека будет полезна.