C# 如何在ASP.NET核心中使用IAApplicationBuilder中间件重载

C# 如何在ASP.NET核心中使用IAApplicationBuilder中间件重载,c#,asp.net-core-mvc,middleware,asp.net-core-middleware,C#,Asp.net Core Mvc,Middleware,Asp.net Core Middleware,ASP.NET Core为app.Use()方法提供了两个重载。通常我们只使用一个重载,即 app.Use(Func<HttpContext,Func<Task>, Task> middleware) app.Use(Func中间件) 它被用作 app.Use(async (context, next) => { await context.Response.WriteAsync("1st middleware <br/>"); aw

ASP.NET Core为
app.Use()
方法提供了两个重载。通常我们只使用一个重载,即

app.Use(Func<HttpContext,Func<Task>, Task> middleware)
app.Use(Func中间件)
它被用作

app.Use(async (context, next) => {
    await context.Response.WriteAsync("1st middleware <br/>");
    await next.Invoke();
});
app.Use(异步(上下文,下一步)=>{
wait context.Response.WriteAsync(“第一中间件
”); 等待next.Invoke(); });
我想使用的另一个重载是

app.Use(Func<RequestDelegate,RequestDelegate> middleware)
app.Use(Func中间件)
我找不到一个我们如何使用这个重载的例子。任何想法都会很棒。

Func
是一个委托,它接受委托并返回委托。您可以将其用于此lambda表达式:

app.Use(next => async context => 
{
    await context.Response.WriteAsync("Hello, World!");
    await next(context);
}
Func
是一个委托而不是lambda,尽管它可以表示为lambda(也称为箭头函数)。但它也可以表示为delegate:
delegate(HttpContext上下文){…}
,或者通过传递/分配方法。