一.概述
中间件(也叫中间件组件)是一种装配到应用管道以处理请求和响应的软件。 每个组件:(1)选择是否将请求传递到管道中的下一个组件;(2)可以在管道中的下一个组件之前和之后执行工作。
请求委托用于生成请求管道。 请求委托会处理每个 HTTP 请求。使用以下方法配置请求委托:Run, Map, Use扩展方法。可以将单个请求委托作为匿名方法(称为内联中间件in-line middleware) 或者可以在可重用类中定义。这些可重用的类和内联匿名方法是中间件,也称为中间件组件。请求管道中的每个中间件组件负责调用管道中的下一个组件,或使管道短路。
(1) Run
//将终端中间件委托添加到应用程序的请求管道中。
public static class RunExtensions
{
public static void Run(this IApplicationBuilder app, RequestDelegate handler);
}
(2) Map
// 根据给定请求路径的匹配对请求管道进行分支。
public static class MapExtensions
{
public static IApplicationBuilder Map(this IApplicationBuilder app, PathString pathMatch, Action<IApplicationBuilder> configuration);
}
(3) Use
// 提供配置应用程序请求的机制
public interface IApplicationBuilder
{
//....
// 将中间件委托添加到应用程序的请求管道中。
IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware);
}
1.1 使用 IApplicationBuilder 创建中间件管道
在Startup. Configure方法中,使用IApplicationBuilder来创建中间件管理。每一个use开头的扩展方法将一个中间件添加到IApplicationBuilder请求管道中。使用Use扩展方法来配置请求委托。每个use的中间件类似如下声明:
public static IApplicationBuilder Use[Middleware] (this IApplicationBuilder app )
public static IApplicationBuilder Use[Middleware] (this IApplicationBuilder app , Action<T>)
http://ASP.NET Core 请求管道包含一系列请求委托,依次调用。 下图演示了这一概念。 沿黑色箭头执行。
在Startup. Configure代码中,一系列use请求委托中间件如下所示:
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();
委托可以决定不将请求传递给下一个委托(中间件),这就是对请求管道进行短路。通常需要短路,因为这样可以避免不必要的工作。
下面示例 是一个最简单的 http://ASP.NET core 应用程序,用run方法配置请求委托,设置单个委托处理处理所有请求。此案例不包括实际的请求管道。相反,调用单个匿名函数以响应每个 HTTP 请求。并用委托终止了管道。
public class Startup