Intern Day7

其实这块我没太懂,因为听的东西都是中间件带一点管道的……

管道是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;
        }

参考视频

  1. https://www.bilibili.com/video/BV1r7411A7Z2?from=search&seid=9070934629069273158 100mins自己去找重点

  2. https://www.bilibili.com/video/BV1Kk4y117Xy?p=6 10mins

原文地址:https://www.cnblogs.com/OFSHK/p/14441753.html