任务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</span>= (context)=><span style="color: #000000;">{
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">end.....</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> Task.CompletedTask;
};
_list.Reverse();</span><span style="color: #008000;">//</span><span style="color: #008000;">顺序反转</span>
<span style="color: #0000ff;">foreach</span>(<span style="color: #0000ff;">var</span> middleware <span style="color: #0000ff;">in</span><span style="color: #000000;"> _list)
{
end</span>=<span style="color: #000000;">middleware.Invoke(end);
}
end.Invoke(</span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Context());
Console.ReadLine();
}
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> Use(Func<RequestDelegate, RequestDelegate><span style="color: #000000;"> middleware)
{
_list.Add(middleware);
}
}
}
dotnet run 执行
执行到1 没有再往下执行
以上就是整个Http管道的构成过程
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· .NET Core GC压缩(compact_phase)底层原理浅谈
· Winform-耗时操作导致界面渲染滞后
· Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能
· 语音处理 开源项目 EchoSharp