zoukankan      html  css  js  c++  java
  • DotNetCore跨平台~聊聊中间件

    回到目录

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

    感谢各位的阅读!

    回到目录

  • 相关阅读:
    Python OpenCV 常用操作
    Conda Cheatsheet | 速查表
    Loadrunner解决启动浏览器后页面显示空白
    26个ASP.NET常用性能优化方法
    C# Foreach用法
    体验ASP.NET MVC3 表单令牌功能!
    基于.Net(C#开发)平台的三层框架架构软件的设计与实现
    去掉浏览器中a标签的虚线
    Microsoft Dynamics CRM 4.0 序列号
    编写 Cookie
  • 原文地址:https://www.cnblogs.com/lori/p/7868628.html
Copyright © 2011-2022 走看看