DotNet Core2.1 编写自己的中间件和后台服务

.Net Core已经发布了很久了,因为项目原因,迟迟没有使用,在最近这几天里面,对其中关键的一些概念和功能进行学习,并记录了下来,希望在帮助自己记忆的同时也能帮助到其他有需要的同学。

 

1.中间件

1.1 中间件的简介

中间件是.Net Core中很重要的概念,也是区别.Net Framework的一大特色。使用中间件,将系统的权限控制,Session,日志等功能都统一了起来。

DotNet Core2.1 编写自己的中间件和后台服务图片来之微软

如上图所示在给浏览器发请求的过程中,会依次先经过中间件,对请求进行一定的处理,然后再进入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>();

 这样我们就完成了为网站添加启动服务的功能。

上一篇:10分钟 Castle.Windsor 适配 Asp.Net Core 3.0


下一篇:.net AutoFac的使用