其实这块我没太懂,因为听的东西都是中间件带一点管道的……
管道是ASP.NET Core WEB应用的核心。
如何配置管道?也就是在我们的管道中布置中间件(有很多种扩展方法,都是由ApplicationBuilder这个接口来提供的)
在ApplicationBuilder.cs源码中有部分代码(即 使用 IApplicationBuilder 创建中间件管道 ),我们可以参考一下来理解一下管道:
//构建管道的方法
public RequestDelegate Build()
{
// 中间件,就是用来报错的(没有终点就报错)
RequestDelegate app = context =>
{
// If we reach the end of the pipeline, but we have an endpoint, then something unexpected has happened.
// This could happen if user code sets an endpoint, but they forgot to add the UseEndpoint middleware.
var endpoint = context.GetEndpoint();
var endpointRequestDelegate = endpoint?.RequestDelegate;
if (endpointRequestDelegate != null)
{
var message =
$"The request reached the end of the pipeline without executing the endpoint: '{endpoint!.DisplayName}'. " +
$"Please register the EndpointMiddleware using '{nameof(IApplicationBuilder)}.UseEndpoints(...)' if using " +
$"routing.";
throw new InvalidOperationException(message);
}
context.Response.StatusCode = StatusCodes.Status404NotFound;
return Task.CompletedTask;
};
//重要的是这两句话,管道就是这两句话构成的
foreach (var component in _components.Reverse())
{
app = component(app); // 穿进去一个委托出来一个委托
}
return app;
}