IApplicationBuilder 中间件 - 为什么两个使用重载?

IApplicationBuilder middleware - why two use overloads?

我试图找出 IApplicationBuilder 中两个 app.Use() 方法的用例。

app.Use(Func<HttpContext,Func<Task>, Task> middleware)

app.Use(Func<RequestDelegate,RequestDelegate> middleware)

回答 如何 使用它们,但我想知道 为什么 你会使用一个而不是另一个.

IApplicationBuilder 接口仅定义

IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)

第二个 an extension method 允许

Adds a middleware delegate defined in-line to the application's request pipeline.

并在内部调用 IApplicationBuilder.Use

    public static IApplicationBuilder Use(this IApplicationBuilder app, Func<HttpContext, Func<Task>, Task> middleware)
    {
        return app.Use(next =>
        {
            return context =>
            {
                Func<Task> simpleNext = () => next(context);
                return middleware(context, simpleNext);
            };
        });
    }