博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DotNetCore跨平台~聊聊中间件
阅读量:6580 次
发布时间:2019-06-24

本文共 2182 字,大约阅读时间需要 7 分钟。

在进行.net core平台之后,我们如果希望在请求过程中添加一些事件是非常容易的,你可以把这些事件做成一个中间件Middleware,然后这些中间件就会以Http pipeline的管道方式进行相应,并且它们就像是一个职责链,从你定义的第一个中间件开始,一个一个向下传递,直到最后一个中间件完成为止!

前几天我写了在.net core里实现模块化服务,主要是将我们定义的组件添加到IServiceCollection集合里,然后在程序启动后去注册它们,而今天要说的Middleware用到的是IApplicationBuilder,它在程序启动后,加载与http请求相关的组件,这些组件以Pipeline的形式进行处理,也就是我们所说的中间件,下面我来带大家实现一个最简单的Middleware!

从网上找的图,挺形象

图中记录了一个请求进来,经过各个中间件的处理,最后逐个响应,下面我们来看一下简单的代码实现,和服务组件化一样,也是一个实现,一个扩展方法的调用,最后在startup里去使用它。

大叔Lind.DotNetCore框架里的Middleware

ResponseTimeMiddleware的实现

///     /// 响应时间的中间件    ///     public class ResponseTimeMiddleware    {        private readonly RequestDelegate _next;        public ResponseTimeMiddleware(RequestDelegate next)        {            _next = next;        }        public async Task Invoke(HttpContext context)        {            Stopwatch sw = new Stopwatch();            sw.Start();            Console.WriteLine("ResponseTimeMiddleware...");            await _next.Invoke(context);            sw.Stop();            Console.WriteLine($"页面响应时间为:{sw.ElapsedMilliseconds}ms");        }    }

扩展方法去封装它,以便于其它地方去使用它

///     /// Lind.DotNetCore.Middleware扩展方法    ///     public static class MiddlewareExtensions    {        public static IApplicationBuilder UseResponseTime(this IApplicationBuilder builder)        {            return builder.UseMiddleware
(); } public static IApplicationBuilder UseRequestKey(this IApplicationBuilder builder) { return builder.UseMiddleware
(); } public static IApplicationBuilder UseAuthorizationOperation(this IApplicationBuilder builder) { return builder.UseMiddleware
(); } }

最后在startup里使用它,注意是在AddMvc方法前面,要不然对你的mvc,api是无效的,呵呵!

public void Configure(IApplicationBuilder app, IHostingEnvironment env)        {            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();            }            app.UseAuthorizationOperation();            app.UseResponseTime();            app.UseRequestKey();            app.UseStaticHttpContext();            app.UseMvc();

事实上,今天的中间件是.net core里非常大的亮点,其实早就应该写这篇文章了,呵呵!

感谢各位的阅读!

 

转载地址:http://dmnno.baihongyu.com/

你可能感兴趣的文章
POJ2229 Sumsets
查看>>
在LINQ-TO-SQL中实现“级联删除”的方法
查看>>
在Oracle Form中,如何实现自动编号(行号)的功能
查看>>
xcode7中搭建python开发环境
查看>>
java设计模式-建造者模式
查看>>
hdu-2604 Queuing---递推+矩阵快速幂
查看>>
OC基础第一讲
查看>>
超越MySQL:三个流行MySQL分支的对比(转)
查看>>
yii2权限控制rbac之rule详细讲解(转)
查看>>
lemur run PLSA
查看>>
Python中什么是变量Python中定义字符串
查看>>
资源文件
查看>>
yii2设置默认控制器
查看>>
Hibernate的大对象映射
查看>>
mongodb 的基本操作
查看>>
Django文档阅读之查询
查看>>
如何把pdf转换为txt文档,pdf转txt的好方法
查看>>
SpringMVC(一)
查看>>
用户登录的代码编写思路
查看>>
素数筛
查看>>