DotNetCore跨平台~聊聊中间件

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

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

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

从网上找的图,挺形象

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

大叔Lind.DotNetCore框架里的Middleware

ResponseTimeMiddleware的实现

    /// <summary>
    /// 响应时间的中间件
    /// </summary>
    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");
        }

    }

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

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

        public static IApplicationBuilder UseRequestKey(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<RequestKeyMiddleware>();
        }

        public static IApplicationBuilder UseAuthorizationOperation(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<AuthorizationOperationMiddleware>();
        }

    }

最后在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里非常大的亮点,其实早就应该写这篇文章了,呵呵!

感谢各位的阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:DotNetCore跨平台~聊聊中间件,如需转载请自行联系原博主。

目录
打赏
0
1
2
12
17
分享
相关文章
一文了解主流开发语言都有哪些!
本文将综合探讨目前市场上最流行、最多人使用的几种主流开发语言,包括它们的特点、典型应用场景以及简单示例代码。
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
主流开发语言和开发环境介绍
主流开发语言和开发环境介绍
122 0
GoFrame v2.5 版本发布,企业级 Golang 开发框架
GoFrame v2.5 版本发布,企业级 Golang 开发框架
137 0
使用Ruby构建可扩展的Web应用程序
在当今科技驱动的世界中,Web应用程序成为了企业和个人进行业务活动、提供服务和与用户互动的重要方式。而Ruby作为一种简洁、优雅且易于学习的编程语言,已经成为许多开发者的选择。本篇博客将介绍如何使用Ruby构建可扩展的Web应用程序。
113 0
Windows下PHP微服务框架Hyperf Swoole开发部署(Docker方式)
Windows下PHP微服务框架Hyperf Swoole开发部署(Docker方式)
882 0
Windows下PHP微服务框架Hyperf Swoole开发部署(Docker方式)
2022年swoole流行的框架有哪些?
如果公司愿意提供付费服务支持,建议选择Hyperf,因为该框架对付费用户提供技术支持,并提供技术培训支持。 如果您无法提供付费,同时有PHP-FPM做切面式的性能优化需求,建议选择 SW-X 该框架支持纯框架实现的RPC服务,无任何第三方依赖的服务中心管理非常方便。 同时该框架除了提供Mysql、Redis、MonggoDB、RBMQ、Crontab、校验器、中间件、限流器等常用组件外,还提供了大量丰富的免费组件库,包括:身份证解析、经纬度反查省市区镇等大数据查询组件等,非常值得企业级开发使用。
借助URLOS快速安装beego web框架
简介 beego是一个快速开发Go应用的http框架,go 语言方面技术大牛。beego可以用来快速开发API、Web、后端服务等各种应用,是一个RESTFul的框架。 今天我们介绍一种更快速的安装方法,那就是通过URLOS一键安装beego。
1229 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等