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;
                }
            }
        }

  • 相关阅读:
    ci 框架 报错级别 调整
    首页流氓广告的一种实现方法
    php中实现中文字符串的反转
    vmware 1021 错误解决 win7 64位
    isset 判断为POST信息是否为空 (笔记,持续更新)
    windows 下 ci 框架 命令行模式(cli)的使用
    ci 框架 excel 上传失败的处理
    php 日期处理(不断更新)
    svn的本地密码文件处理
    rpmdb open failed 的解决办法
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/9104339.html
Copyright © 2011-2022 走看看