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

  • 相关阅读:
    c/c++设置图片为透明图
    转;说说AngularJS中的$parse和$eval
    转: css3: display:box详解
    转: 深入理解 AngularJS 的 Scope
    转:说说angularjs中的$parse和$eval
    转: 理解AngularJS中的依赖注入
    angularjs学习总结(快速预览版)
    XML基础知识
    读书笔记:js设计模式
    contains 和 ele.compareDocumentPosition确定html节点间的关系
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/9104339.html
Copyright © 2011-2022 走看看