#author("2023-11-16T11:02:59+08:00","default:Admin","Admin") #author("2023-11-16T11:04:13+08:00","default:Admin","Admin") [[ASP.NET Core Web]] &color(red){※This article is based on .NET 7}; #contents * 概要 [#wae32134] 中间件在ASP.NET Core被表示成一个Func<RequestDelegate, RequestDelegate>对象,也就是说它的输入和输出都是一个RequestDelegate。 对于为什么会采用一个Func<RequestDelegate, RequestDelegate>对象来表示中间件,很多初学者会很难理解。我们可以这样的考虑:对于管道的中的某一个中间件来说,由后续中间件组成的管道体现为一个RequestDelegate对象,由于当前中间件在完成了自身的请求处理任务之后,往往需要将请求分发给后续中间件进行处理,所有它它需要将由后续中间件构成的RequestDelegate作为输入。 当代表中间件的委托对象执行之后,我们希望的是将当前中间件“纳入”这个管道,那么新的管道体现的RequestDelegate自然成为了输出结果。所以中间件自然就表示成输入和输出均为RequestDelegate的Func<RequestDelegate, RequestDelegate>对象。 &ref(netcore_midleware.jpg); * 例程 [#m8cc5857] #codeprettify{{ app.Map("/test", async appbuilder => { appbuilder.Use(async (context, next) => { context.Response.ContentType = "text/html"; await context.Response.WriteAsync("1 Start<br/>"); await next.Invoke(); await context.Response.WriteAsync("1 End<br/>"); }); appbuilder.Use(async (context, next) => { await context.Response.WriteAsync("2 Start<br/>"); await next.Invoke(); await context.Response.WriteAsync("2 End<br/>"); }); appbuilder.Run(async ctx => { await ctx.Response.WriteAsync("hello middleware <br/>"); }); }); }} #hr(); コメント: #comment_kcaptcha