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

  • 相关阅读:
    FCKeditor 2.3 在ASP.NET中的设置和使用
    如何去掉重复记录的Sql语句写法
    asp.net如何去掉HTML标记
    Asp.net中如何删除cookie?
    怎样得到select所有option里的值
    HttpModule是如何工作的
    Asp.net2.0下的表单验证Cookieless属性
    FreeTextBox实现机制
    ajax实现动态从数据库模糊查询显示到下拉框中(ajax方法返回Dataset的例子)
    新浪博客自动发表程序,请勿用于非法用途
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/9104339.html
Copyright © 2011-2022 走看看