在 ASP.NET Core 中使用 Hangfire
以往有些工作因為會因執行時間過長而不會直接在網站上執行,而是寫成 Console 程式並佈署在 Windows Service,但在管理上較為不便,有一套函式庫可以直接在 ASP.NET 網站上直接報行背景程式,就是本篇文章要介紹的 Hangfire。
首先在新增 ASP.NET Core 網站後,在 Nuget 管理工具新增下列套件
之後新增一個 Job,程式碼如下:
[ManagementPage("一般")]
public class DemoJob
{
[Hangfire.Dashboard.Management.Support.Job]
[DisplayName("測試用Job")]
public async Task Action(PerformContext context = null, IJobCancellationToken cancellationToken = null)
{
if (cancellationToken.ShutdownToken.IsCancellationRequested)
{
return;
}
Console.WriteLine("Test");
}
}
然後再新增一個 Filter,做為 Hangfire 管理介面的認證之用:
public class HangfireAuthorizationFilter: IDashboardAuthorizationFilter
{
public bool Authorize(DashboardContext context)
{
return true;//為示範用,故不放認證邏輯
}
}
最後就是在 Startup.cs 做設定:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
//setup hangfire
//ConfigureAuth(app);
app.UseHangfireServer();
var options = new DashboardOptions
{
Authorization = new[] { new Filters.HangfireAuthorizationFilter() }
};
app.UseHangfireDashboard("/hangfire", options);
....
}
之後在首頁後面加上 ‘/hangfire’ 就可以進管理頁面。