以往有些工作因為會因執行時間過長而不會直接在網站上執行,而是寫成 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’ 就可以進管理頁面。