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

dotnet new console --name MyPipeline

任务29:自己动手构建RequestDelegate管道_命名空间

用VSCode打开这个项目

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

任务29:自己动手构建RequestDelegate管道_ASP.NET Core快速入门_02

 

引入命名空间。

创建一个delegaet 叫做 RequestDelegate

任务29:自己动手构建RequestDelegate管道_ASP.NET Core快速入门_03

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

任务29:自己动手构建RequestDelegate管道_知识_04

 

完善RequestDelegate

任务29:自己动手构建RequestDelegate管道_文件复制_05

 

新建一个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);
}


 


任务29:自己动手构建RequestDelegate管道_命名空间_06任务29:自己动手构建RequestDelegate管道_文件复制_07


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

 

 

任务29:自己动手构建RequestDelegate管道_命名空间_08

 

任务29:自己动手构建RequestDelegate管道_应用程序_09

 

 dotnet run 执行

任务29:自己动手构建RequestDelegate管道_文件复制_10

 

任务29:自己动手构建RequestDelegate管道_应用程序_11

执行到1 没有再往下执行

任务29:自己动手构建RequestDelegate管道_文件复制_12

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