安装Hangfire新建ASP.NET Core空 项目,.Net Core版本3.1
文章插图
往*.csproj添加包引用,添加新的PackageReference标记 。如下所示 。请注意,下面代码段中的版本可能已经过时,如有需要,请使用nuget获取最新版本 。
<ItemGroup><PackageReference Include="Hangfire.Core" Version="1.7.28" /><PackageReference Include="Hangfire.SqlServer" Version="1.7.28" /><PackageReference Include="Hangfire.AspNetCore" Version="1.7.28" /></ItemGroup>
创建数据库从上面的代码片段中可以看到,在本文中,我们将使用SQL Server作为作业存储 。在配置Hangfire之前,您需要为它创建一个数据库,或者使用现有的数据库 。下面的配置字符串指向本地计算机上SQLEXPRESS实例中的HangfireTest数据库 。您可以使用SQLServerManagementStudio或任何其他方式执行以下SQL命令 。如果您使用的是其他数据库名称或实例,请确保在接下来的步骤中配置Hangfire时更改了连接字符串 。
CREATE DATABASE [HangfireTest]GO
配置Settings下面将定义HangfireConnection连接来进行表迁移,同时AspNetCore与Hangfire进行了日志记录集成 。Hangfire的日志信息有时非常重要,有助于诊断不同的问题 。信息级别允许查看Hangfire的工作情况,警告和更高的日志级别有助于调查问题,建议调整日志级别文章插图
【.NET Core Hangfire任务计划】
{"ConnectionStrings": {"HangfireConnection": "Server=.\sqlexpress;Database=HangfireTest;Integrated Security=SSPI;"},"Logging": {"LogLevel": {"Default": "Warning","Hangfire": "Information"}}}
文章插图
更新应用程序设置后,打开Startup.cs文件 。startup类是.NET CORE应用程序的配置 。首先,我们需要导入Hangfire名称空间,由于建的是空项目,所以还需要导入Configuration.
using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Configuration;using Hangfire;using Hangfire.SqlServer;
注册服务使用asp.netcore内置DI注入Hangfire服务文章插图
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services){// Add Hangfire services.services.AddHangfire(configuration => configuration.SetDataCompatibilityLevel(CompatibilityLevel.Version_170).UseSimpleAssemblyNameTypeSerializer().UseRecommendedSerializerSettings().UseSqlServerStorage(Configuration.GetConnectionString("HangfireConnection"), new SqlServerStorageOptions{CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),QueuePollInterval = TimeSpan.Zero,UseRecommendedIsolationLevel = true,DisableGlobalLocks = true}));// Add the processing server as IHostedServiceservices.AddHangfireServer();}
文章插图
添加Hangfire面板如果只是作为后台作业,也可不使用面板功能,按需添加
文章插图
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {app.UseRouting();app.UseEndpoints(endpoints =>{
endpoints.MapGet("/", async context =>{
await context.Response.WriteAsync("Hello World!");
});
endpoints.MapHangfireDashboard();
});
BackgroundJob.Enqueue(() => Console.WriteLine("测试"));
}
文章插图
运行程序生成数据表
文章插图
访问
http://localhost:5000/hangfire
文章插图
添加Hangfire面板授权新建MyAuthorizationFilter.cs
文章插图
public class MyAuthorizationFilter : IDashboardAuthorizationFilter{public bool Authorize(DashboardContext context){var httpContext = context.GetHttpContext();string header = httpContext.Request.Headers["Authorization"];//获取授权if(header == null)return AuthenicateLogin();//解析授权var authHeader = AuthenticationHeaderValue.Parse(header);var credentialBytes = Convert.FromBase64String(authHeader.Parameter);var credentials = Encoding.UTF8.GetString(credentialBytes).Split(new[] { ':' }, 2);var username = credentials[0];var password = credentials[1];//验证登录if (username == "admin" && password =="123456")return true;elsereturn AuthenicateLogin();//跳转简单登录界面bool AuthenicateLogin(){httpContext.Response.StatusCode = 401;httpContext.Response.Headers.Append("WWW-Authenticate", "Basic realm="Hangfire Dashboard"");context.Response.WriteAsync("Authenticatoin is required.");return false;}}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 红茶泡绿茶,绿茶与红茶的酸碱性
- 黑茶红茶混泡,茉莉红茶品牌
- 如何使用 .NET Core 安全地加/解密文件
- c# 8个常用的.net类库
- .NET 6新特性试用 | System.Text.Json序列化代码自动生成
- 自定义 ASP.NET Core 中间件
- .NET 6 新特性 PeriodicTimer
- .net6给winform带来的新功能
- 使用.NET5、Blazor和Electron.NET构建跨平台桌面应用
- .net微信全平台快速开发的应用框架,专注业务实现,值得收藏