【发布时间】:2020-03-05 01:27:03
【问题描述】:
我有一个用作“作业调度程序”的 ASP.NET Core 应用程序,因此我需要让应用程序为已配置的作业运行 cron 作业。我想出了一个方法来做到这一点,但不幸的是,它只适用于使用 IServiceCollection 抽象类的 Startup.cs 文件。由于此应用程序的性质,我需要能够在发出发布请求时在我的控制器中添加一个 cron 作业。
这是我在 Startup.cs 中添加 cron 作业的方法:
public void ConfigureServices(IServiceCollection services)
{
// Basic config code above here
services.AddCronJob<CronJob>(c =>
{
c.TimeZoneInfo = TimeZoneInfo.Local;
c.CronExpression = @"" + cronEx;
Console.WriteLine(c.CronExpression);
});
}
}
这是我的 API 控制器以及我正在尝试做的事情:
// POST: api/Jobs
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see https://aka.ms/RazorPagesCRUD.
[HttpPost]
public async Task<ActionResult<Job>> PostJob(Job job)
{
_context.Job.Add(job);
await _context.SaveChangesAsync();
services.AddCronJob<CronJob>(c =>
{
c.TimeZoneInfo = TimeZoneInfo.Local;
c.CronExpression = @"" + job.CronExpression;
});
return CreatedAtAction("GetJob", new { id = job.Id }, job);
}
我不完全确定这是否可能,但任何见解都会有所帮助。
【问题讨论】:
-
服务是您在客户端请求和服务器之间添加的中间件。与中间件相关的所有内容都应仅适用于 startup.cs。也许您可以在启动时执行 services.AddCronJob,方法是读取正文内容以在请求调用控制器中的 PostJob 之前进行检查。
标签: c# asp.net entity-framework asp.net-core entity-framework-core