zoukankan      html  css  js  c++  java
  • 任务29:自己动手构建RequestDelegate管道

    cmd创建一个控制台应用程序

    dotnet new console --name MyPipeline

    用VSCode打开这个项目

     新建类RequestDelegate.cs的类文件复制Program里面的代码到RequestDelegate里面代码修改

    引入命名空间。

    创建一个delegaet 叫做 RequestDelegate

    为了演示用,新建一个Context.cs

    完善RequestDelegate

    新建一个List接收一个RequestDelegate返回一个Delegate

    public static List<Func<RequestDelegate,RequestDelegate>> _list=new List<Func<RequestDelegate, RequestDelegate>>();

    模拟我们的ApplicationBuilder里面的方法新建Use的方法,接受一个Func里面接受一个RequestDelegate返回一个RequestDelegate

      public static void Use(Func<RequestDelegate, RequestDelegate> middleware)
      {
         _list.Add(middleware);
      }
    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    
    namespace MyPipeline
    {
        class Program
        {
            public static List<Func<RequestDelegate,RequestDelegate>> _list=new List<Func<RequestDelegate, RequestDelegate>>();
            static void Main(string[] args)
            {
                 Use(next=>{
                    return context=>{
                        Console.WriteLine("1");
                        return next.Invoke(context);
                         //return Task.CompletedTask;
                    };
                });
                 Use(next=>{
                    return context=>{
                        Console.WriteLine("2");
                        return next.Invoke(context);
                    };
                });
    
                RequestDelegate end= (context)=>{
                    Console.WriteLine("end.....");
                    return Task.CompletedTask;
                };
                _list.Reverse();//顺序反转
                foreach(var middleware in _list)
                {
                    end=middleware.Invoke(end);
                }
    
               
                end.Invoke(new Context());
                Console.ReadLine();
            }
    
            public static void Use(Func<RequestDelegate, RequestDelegate> middleware)
            {
                _list.Add(middleware);
            }
    
        }
    }
    Program.cs

     dotnet run 执行

    执行到1 没有再往下执行

    以上就是整个Http管道的构成过程

  • 相关阅读:
    legend3---videojs存储视频的播放速率便于用户观看视频
    legend3---mathjax的动态渲染问题解决
    matplotlib库疑难问题---10、画直方图
    matplotlib库疑难问题---9、画箭头(综合实例)
    js释放图片资源
    javascript中的原型与原型链
    前端跨域方式
    matplotlib清除 axes 和 figure
    matplotlib画直方图细解
    CentOS 7.8 安装 Python 3.8.5
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/10367256.html
Copyright © 2011-2022 走看看