Net Core环境搭建Hangfire项目
添加相关代码配置。
1.因hangfire的任务需要数据库持久化,我们在Startup类中修改ConfigureServices,简单配置如下:
var connection = Configuration["ConnectionsStrings"]; //数据库链接配置 services.AddHangfire(x => x.UseSqlServerStorage(connection));
如果需要配置详细信息,则配置如下:
//hangfire的任务需要数据库持久化 //Hangfire.AspNetCore //Hangfire.MySql.Core mysql引用 大小写敏感 //Hangfire.SqlServer sqlserver引用 大小写敏感 //hangfire必须需要绑定一个持久化的连接数据。 官方推荐的是sqlserver,还有mg,mssql,pgsql,redis都是个人封装的 //连接字符串必须加 Allow User Variables=true services.AddHangfire(x => x.UseStorage(new SqlServerStorage( Configuration["ConnectionString"], new SqlServerStorageOptions { TransactionIsolationLevel = IsolationLevel.ReadCommitted, // 事务隔离级别。默认是读取已提交。 QueuePollInterval = TimeSpan.FromSeconds(15), //- 作业队列轮询间隔。默认值为15秒。 JobExpirationCheckInterval = TimeSpan.FromHours(1), //- 作业到期检查间隔(管理过期记录)。默认值为1小时。 CountersAggregateInterval = TimeSpan.FromMinutes(5), //- 聚合计数器的间隔。默认为5分钟。 PrepareSchemaIfNecessary = true, //- 如果设置为true,则创建数据库表。默认是true。 DashboardJobListLimit = 50000, //- 仪表板作业列表限制。默认值为50000。 TransactionTimeout = TimeSpan.FromMinutes(1), //- 交易超时。默认为1分钟。 } )));
以上为SqlServer相关配置,MySql类型,区别为相关名称修改为MySql,如:SqlServerStorage→MySqlStorage,
SqlServerStorageOptions→MySqlStorageOptions
2.自定义配置hangfire面板 (在Startup.cs 的Configure)
简单引用如下:
app.UseHangfireDashboard(); //使用hangfire面板 app.UseHangfireServer(); //启动hangfire服务
若需要配置其详细信息,则配置如下:
原生的面板如果不指定路径。默认的进入面板的地址是 (端口号:/hangfire),支持自定义进入hangfire的路径
Hangfire.Dashboard.Authorization 包的自定义方法 (方法1):
//添加面板的打开权限。不是所有人都可以打开面板。可以操作后台任务。 app.UseHangfireDashboard("", new DashboardOptions { //方法1 Authorization = new[] { new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions { SslRedirect = false, // 是否将所有非SSL请求重定向到SSL URL RequireSsl = false, // 需要SSL连接才能访问HangFire Dahsboard。强烈建议在使用基本身份验证时使用SSL LoginCaseSensitive = false, //登录检查是否区分大小写 Users = new[] { new BasicAuthAuthorizationUser { Login ="ycz",//用户名 PasswordClear="123456" // Password as SHA1 hash //Password=new byte[]{ 0xf3,0xfa,,0xd1 } } } }) }, });
方法2:
//添加面板的打开权限。不是所有人都可以打开面板。可以操作后台任务。 app.UseHangfireDashboard("", new DashboardOptions { //方法2 Authorization = new[] { new HangfireAuthorizationFilter(){} }, });
方法2启用的自定义规则类 。需要重写 IDashboardAuthorizationFilter 的 Authorize 方法
//默认是只能内网访问。 需要重写这个方法。注入规则 public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter { //这里写自定义规则 public bool Authorize([NotNull] DashboardContext context) { if (context.Request.LocalIpAddress.Equals("127.0.0.1") || context.Request.LocalIpAddress.Equals("::1")) return true; else return false; } }
方法 1 是支持可视化界面的。 方法 2没有可视化界面但是开放了接口 IDashboardAuthorizationFilter 可以重写自定义规则
方法 1 和 方法 2 引用的包不一样,不可同时使用两种方法。需要注意
Hangfire.Dashboard.BasicAuthorization (方法1的包)
Hangfire.Dashboard.Authorization (方法2的包)
方法 1 和 方法 2 根据自己的需求。自行选择。
方法1 可视化界面 输入正确进入仪表盘。 输入错误会刷新界面 继续在当前登录页。
方法2 拦截器验证 通过验证直接进入仪表盘。 没通过验证返回 401
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误