zoukankan      html  css  js  c++  java
  • ASP.NET Core Middleware管道介绍

            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                app.Use(next => {
                    return async context => {
                        await context.Response.WriteAsync("A11111111</br>");
                        await next.Invoke(context); //下一中间件
                        await context.Response.WriteAsync("B11111111</br>");
                    };
                });
                app.Use(next => {
                    return async context => {
                        await context.Response.WriteAsync("A22222222</br>");
                        await next.Invoke(context); //下一中间件
                        await context.Response.WriteAsync("B22222222</br>");
                    };
                });
                app.Use(next => {
                    return async context => {
                        await context.Response.WriteAsync("A33333333</br>");
                        await context.Response.WriteAsync("B33333333</br>");
                    };
                });
    
            }

     

    运行的时候是先执行3->2->1 倒序

    自己动手构建RequestDelegate管道

        class Program
        {
            static void Main(string[] args)
            {
                ApplicationBuilder app = new ApplicationBuilder();
                app.Use(next =>
                {
                    return async context =>
                    {
                        await context.WriteAsync("A11111111
    ");
                        await next.Invoke(context); //下一中间件
                        await context.WriteAsync("B11111111
    ");
                    };
                });
                app.Use(next =>
                {
                    return async context =>
                    {
                        await context.WriteAsync("A22222222
    ");
                        await next.Invoke(context); //下一中间件
                        await context.WriteAsync("B22222222
    ");
                    };
                });
                app.Use(next =>
                {
                    return async context =>
                    {
                        await context.WriteAsync("A33333333
    ");
                        await context.WriteAsync("B33333333
    ");
                    };
                });
                var requestDelegate = app.Build();
                requestDelegate.Invoke(new HttpContext());
                Console.ReadLine();
            }
    
            public delegate Task RequestDelegate(HttpContext context);
    
            public class HttpContext
            {
                public async Task WriteAsync(string text)
                {
                    Console.WriteLine(text);
                    await Task.CompletedTask;
                }
            }
    
            public class ApplicationBuilder
            {
                public List<Func<RequestDelegate, RequestDelegate>> _list = new List<Func<RequestDelegate, RequestDelegate>>();
                RequestDelegate requestDelegate = new RequestDelegate(async context =>
                {
                    Console.WriteLine("404
    ");
                    await Task.CompletedTask;
                });
    
                public RequestDelegate Build()
                {
                    _list.Reverse();
                    foreach (var func in _list)
                    {
                        requestDelegate = func.Invoke(requestDelegate);
                    }
                    return requestDelegate;
                }
    
                public ApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)
                {
                    this._list.Add(middleware);
                    return this;
                }
            }
        }

  • 相关阅读:
    windows下安装elasticsearch和elasticsearch-head
    Java学习第四天之标识符与关键字
    Java学习第三天之注释
    Java学习第二天之Java程序的基本规则
    Java学习第一天之简单了解java语言及开发环境的安装
    rhel7下安装EPEL源
    Mac OS Catalina 如何删除自带的应用
    jetbrains全系列可用2018
    Windows中zabbix-agent的安装与卸载
    jumpserver修改账号密码以及jumpserver安装教程
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/9104339.html
Copyright © 2011-2022 走看看