.NetCore 简单的使用中间件
//定义中间件
我们定定义中间件通常有 app.Use(), app.Run(), app.Map() , appMapWhen()四个方法
1:app.Use()
IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware);
其中 RequestDelegate 仍然是一个委托,需要满足如下的签名
public delegate Task RequestDelegate(HttpContext context);
app.Use(next =>
{
return new RequestDelegate(async c =>
{
await c.Response.WriteAsync("start-88888888888");
await next.Invoke(c);
await c.Response.WriteAsync("end-88888888888");
});
});
2:app.Run() 默认会终止后面的所有管道事件或者中间件等函数,如果app.Use()去掉了 await next.Invoke()就和 app.Run()是等价的效果
3:app.Map() 这个方法为我们提供了一些方便的分支处理 ,它是在管道中增加了分支。通过映射路径来判断处理管道分支
public static IApplicationBuilder Map(this IApplicationBuilder app, PathString pathMatch, Action<IApplicationBuilder> configuration);
pathMatch 我们从字面意思上就可以理解到,请求的链接路径匹配的话,就执行 configuration 里面的中间件或者函数
app.Map("/mapTest", DoMyHandler); //doHandler 为自定义的相关匹配签名函数即可
app.Run(async context =>
{
await context.Response.WriteAsync(" hello world! ");
});
private void DoMyHandler(IApplicationBuilder build)
{
build.Use(next => new RequestDelegate(async c =>
{
await c.Response.WriteAsync("你好");
}));
}
//--或者如下
private static void doMyHandler(IApplicationBuilder app)
{
app.Run(async context =>
{ await context.Response.WriteAsync("你好我好大家好!");
});
}
4:app.MapWhen() 从字面上可以理解为 符合判断才会进入对应的中间件
app.MapWhen(context =>
{
return context.Request.Query.ContainsKey("qq");
}, DoMyHandler);
中间件我们通常是把上面的方法给提出来并放在一个class类里面,并进一步使用扩展方法, IApplicationBuilder相当于一个容器集合!
5:一些简单的测试截图如下:
6:新增扩展方法就显得更加的规范了:
好了今天就先到这里,下次有时间再更新,如果存在不合理的地方,欢迎大家多多指教留言!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具