任务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管道的构成过程

 

转载于:https://www.cnblogs.com/wangjunwei/p/10367256.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值