Похоже, что для создания PDF-файла из представления необходимо использовать метод BuildFile(ControllerContext context), который требует ControllerContext в качестве входного аргумента.
Итак, что мы можем сделать, если нет HttpContext, например, рассмотрим сценарий, в котором вы собираетесь создать несколько PDF-файлов и отправить их по электронной почте некоторым клиентам в фоновом задании (например, IHostedService)? Есть ли обходной путь?
Я хочу иметь возможность отправлять электронные письма с вложенным PDF-файлом, созданным с помощью Rotativa ASP.NET Core, каждые 2 часа, но при этом возникает проблема. из IHostedService, но если это сделать с помощью кнопки из представлений, это работает правильно.
Похоже, проблема в этой строке, поскольку ControllerContext null.
Это мой код:
public async Task EnviarParosPorCorreo(DateTime FechaInicio, DateTime FechaFinal)
{
var modelo = new VMReporteParo
{
Datos_Paros = Datos_Paro,
Acumulado_Paro = Acu_Paro,
Fallas = Fallas
};
var actionPDF = new ViewAsPdf("ImprimirParos", modelo)
{
CustomSwitches = "--enable-javascript --no-stop-slow-scripts --javascript-delay 3000 --page-size Letter --margin-top 2 --margin-right 0 --margin-bottom 0 --margin-left 0",
PageSize = Rotativa.AspNetCore.Options.Size.Letter,
PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
PageMargins = { Left = 1, Right = 1 }
};
byte[] pdfData;
using (var pdfStream = new MemoryStream())
{
pdfData = await actionPDF.BuildFile(ControllerContext);
}
EnviarCorreo(pdfData);
return Ok("Correo enviado exitosamente.");
}
public Task StartAsync(CancellationToken cancellationToken)
{
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromHours(2)); // Run every 2 hours
return Task.CompletedTask;
}
private async void DoWork(object state)
{
using (var scope = _serviceProvider.CreateScope())
{
var reportsController = scope.ServiceProvider.GetRequiredService();
var startDate = DateTime.Now.Date;
var endDate = DateTime.Now.Date.AddDays(1).AddTicks(-1);
await reportsController.SendParosByMail(startdate, enddate);
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... rcontext-c