• ASPNetCore之中间件和请求处理管道(3)


    启动的顺序 

    Main-->CreateHostBuilder-->ConfigureWebHostDefaults
    -->Startup-->ConfigureServices-->CreateHostBuilder-->Configure
    -->WeatherForecastController-->api/Method

     中间件在Configure方法中是注重先后顺序的

     //Configure类是一定要的,哪怕里面是个空的、用来进行管道,http请求的处理
                public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                {
                    //Configure是用来处理中间件的方法  处理Http请求和相应
                    //1:在请求之前和之后,执行一些相应的工作
                    //2:异常中间件,日志,身份授权,记录请求,静态资源中间件
                //3:这些中间件都是特性功能的组件(类),单一职责
                    if (env.IsDevelopment())//判断是否是开发者模式
                    {
                        //异常中间件,当我们是开发者模式的情况下,这个组件就会被注册到请求处理管道中
                        app.UseDeveloperExceptionPage();//异常中间件
                    }
                    //我们在每个中间件当中,处理Http请求,之前或者之后
                    //你也可以选择中间传递,传递到下一个中间件,你也可以不传递
                    //这个输出了,下面的Hello World!就不会再输出了
                    // app.Run(async context => { await context.Response.WriteAsync("Hello!!!!!"); });
                   
                    //这里加上Next 下面的Hello World!会输出的
                    app.Use(async (context, next) => {
                        await context.Response.WriteAsync("Hello!!!!!");
                        await next();
                    });
                    app.UseRouting();//路由中间件
                    //终结点中间件
                    app.UseEndpoints(endpoints =>
                    {
                        endpoints.MapGet("/", async context =>
                        {
                            await context.Response.WriteAsync("Hello World!");
                        });
                    });
                }

    请求处理管道 

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                app.Use(async (context, next) =>
                {
                    await context.Response.WriteAsync("middleware1_In
    ");
                    await next();
                    await context.Response.WriteAsync("middleware1_Out
    ");
                });
                // next()的作用:是否请求下个中间件
                app.Use(async (context, next) =>
                {
                    await context.Response.WriteAsync("middleware2_In
    ");
                    //await next();//如果这里将Next(),注释掉下面Run()的中间件是不会请求的==》称之为短路请//middleware1_In ===》middleware2_In ===》middleware2_Out ===》middleware1_Out
                    //就不会再请求下面的middleware3_In了
                    await context.Response.WriteAsync("middleware2_Out
    ");
                });
    
                //从Run()(短路中间件,开始返回)这里请求就开始返回了
                app.Run(async context =>
                {
                    await context.Response.WriteAsync("middleware3_In
    ");
    
                });
                //middleware1_In
                //middleware2_In
                //middleware3_In
                //middleware2_Out
                //middleware1_Out
            }

    1)ConfigureServices方法
       此方法在宿主程序开始运行时执行,主要功能是实现容器注入。也就是它只在主程序启动进执行一次。2)Configure方法
       在Configure方法中,我们看到使用了许多Use方法来处理http请求。
       在里面也可以自定义中间件。它贯穿了每个HTTP请求。
       重点:它在每一次http请求后时都会从头执行一次。
    
    注:宿主程序
    1:比如说asp.net应用程序和IIS,asp.net应用程序需要运行在IIS里面,IIS就是宿主程序.
    2:在C#里面,宿主程序提供一个公用的接口规范,提供插件的入口,而编写插件的人员,
       只需要实现宿主提供的接口,生成动态库,然后由宿主程序利用反射技术,将插件加载到宿主程序里面,
       这样,最大的好处就是能够让开发更灵活,更容易维护和扩展。其实,IE就是一个典型的宿主程序
    3:在计算机环境下,软件赖以生存的软件环境被称作是宿主环境(host environment). 
       CLR (Common Language Runtime),环境就是称作宿主(Host) 。
       宿主就是运行环境(即宿主程序),比如:asp需要运行在IIS里,IIS就是宿主程序。
       宿主环境(宿主程序)可以是操作系统,服务器程序,应用程序,
       而开发这些宿主环境的程序语言(如开发操作系统一般使用c语言,开发WebServer一般使用c或java语言,开发应用程序一般使用C++/java/c#语言)
       被称作系统开发语言,
       或用一个更贴切的说法是---宿主语言
    人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。
  • 相关阅读:
    Git fetch和git pull的区别
    git revert和git reset的区别
    JSF 与 HTML 标签的联系
    3. Decorator
    2. Observer
    1. Strategy
    继承构造函数的执行顺序
    模板特化
    8.1.2 Template instantiation (Accelerated C++)
    std::cin
  • 原文地址:https://www.cnblogs.com/ZkbFighting/p/14694262.html
Copyright © 2020-2023  润新知