DotNet Core2.1 编写自己的中间件和后台服务
作者:互联网
.Net Core已经发布了很久了,因为项目原因,迟迟没有使用,在最近这几天里面,对其中关键的一些概念和功能进行学习,并记录了下来,希望在帮助自己记忆的同时也能帮助到其他有需要的同学。
1.中间件
1.1 中间件的简介
中间件是.Net Core中很重要的概念,也是区别.Net Framework的一大特色。使用中间件,将系统的权限控制,Session,日志等功能都统一了起来。
图片来之微软
如上图所示在给浏览器发请求的过程中,会依次先经过中间件,对请求进行一定的处理,然后再进入Action进行操作,因此一些权限控制等操作(AOP操作)就可以在中间件中执行。
1.2 Startup类在程序启动时的运行流程
在使用该功能之前,我们需要知道程序在Startup中的运行大致过程。
首先我们需要知道程序在启动的时候是先进入Startup类中的ConfigureServices为程序添加一些额外的服务,然后进入Configure配置网站的中间件。
public class Startup { // 向程序添加服务 public void ConfigureServices(IServiceCollection services) { ... } // 配置程序的中间件操作 public void Configure(IApplicationBuilder app) { ... } }
比如我们想在程序启动的时候做一些工作,在.Net Framework中我们需要在global.asax中的Application_Start方法中配置适当算法,而.Net Core中我们就需要在ConfigureServices方法中编写同样的代码。只不过操作方式是以,为IServiceCollection集合添加服务的方式进行的。
1.3 编写自己的中间件
Asp .Net Core已经内置了一些中间件,具体可以查看官网 链接
在这里我们只讨论如何编写自己的中间件
编写过程分为2步:
1)按照官网对中间件类的约定,编写一个中间件类
public class MyMiddleware { private readonly RequestDelegate _next; public MyMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { //编写自己的中间件操作 // 调用下一个中间件 await _next(context); } }
2)为IApplicationBuilder添加一个扩张方法,在StartUp.Configure方法中直接进行调用
public static class IApplicationBuilderExtension { public static IApplicationBuilder UseMyMiddleware( this IApplicationBuilder builder)
{
return builder.UseMiddleware<MyMiddleware>();
}
}
在StartUp.Configure方法中添加:
app.UseMyMiddleware();
这样就完成了一个中间件的编写。
2.后台服务
有时我们想要在网站启动的时候启动某项服务,比如我们想要在启动网站时监听消息队列。
Asp .Net Core 2.1为我们提供了一个抽象类 BackgroundService,如果我们需要启动一个后台服务,我们只需要两个步骤:
1)继承BackgroundService,并实现其中的ExecuteAsync方法,在里面编写服务需要进行的操作;
public class MqService : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await Task.Run(() => { //编写服务的功能代码 }); } }
2)在StartUp.ConfigureServices方法中注册该服务
在ConfigureServices方法中添加如下代码:
services.AddSingleton<Microsoft.Extensions.Hosting.IHostedService, MqService>();
这样我们就完成了为网站添加启动服务的功能。
标签:ConfigureServices,中间件,public,DotNet,编写,Net,next,Core2.1 来源: https://www.cnblogs.com/gamov/p/10382579.html