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

时间:2018-03-16 11:24:25

标签: c# asp.net-core asp.net-core-middleware

我试图弄清楚IApplicationBuilder中两个app.Use()方法的用例。

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

VS

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

How to use IApplicationBuilder middleware overload in ASP.NET Core回答如何使用它们,但我想知道为什么你会使用其中一个。

1 个答案:

答案 0 :(得分:2)

IApplicationBuilder接口仅定义

IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)

秒只是an extension method允许

  

在应用程序的请求管道中添加一个内联定义的中间件委托。

并在内部调用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);
            };
        });
    }