• Asp.NetCore Web应用程序中的请求管道和中间件


        你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCore Web应用程序中的请求处理过程。

        上一节,我们讲到,Startup文件中用来配置中间件(middleware),这个中间件就是用来处理请求的。那标题中的请求管道又是什么呢,其实所有的中间件就组成了一个请求管道,我们的请求,到达ASP.NetWeb应用程序,就会被送到第一个中间件中,一个个的访问,每个中间件都对请求进行处理,直到进行到最后一个中间件原路返回处理结果,或者中途被某个中间件拦截直接返回处理结果。

        这种中间件的访问处理就像俄罗斯套娃一样,一层层深入访问,一层层返回结果。下面来看一下startup中的初始中间件都有哪些。

        注意,中间件的顺序也是有规律的。错误处理中间件的添加逻辑,总是第一位的,

     if (env.IsDevelopment()) { 
    app.UseDeveloperExceptionPage();
    } else {
      app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
    }

        Endpoints中间件总是在最后,它用于处理以上中间件都没有捕获到的情况,初始配置是返回homecontroller中的index方法,他是直接拦截并返回的,所以在它以后的中间件,总是得不到执行。

    app.UseEndpoints(endpoints =>  {
    endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
    });

        我们再回过头来看这个方法声明

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

        如果在VS中打开,你会发现它是“0 references”,没有引用那它是怎么执行的呢,其实,我们不会手动去调用它,这个方法是交由CLR去调用的,我们可以看到负责添加中间件的参数是继承了IApplicationBuilder 这个接口的对象,所以很清楚的,我们了解到,这个类是负责Build Application 的,所以这个方法是参与到程序的生成期的,不是运行期的。

        .NetCore为我们提供了一些必须的中间件,约定以Use开头,我们可以直接去添加使用,下面简单解释一些常用中间件的作用:

     
    app.UseHttpsRedirection();//负责重定向页面
    app.UseStaticFiles();//添加静态文件(wwwroot中的)
    app.UseRouting();//对路由的支持
    app.UseAuthorization();//负责授权

        请求和响应,就是在请求管道中被中间件层层处理并返回的过程,下一节会演示一下如何自定义一个中间件,我们可以通过自定义中间件处理逻辑来处理请求

  • 相关阅读:
    java如何手动创建一个线程池
    HashMap的面试总结(摘抄)
    JDK源码调试
    分布式和集群的区别
    开发中model,entity和pojo的区别
    java并发编程_CountDownLanch(倒计数锁存器)应用场景
    Map 怎么排序
    java中Thread的 interrupt异常处理
    zookeeper节点失效重连机制
    java并发库_并发库知识点整理
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13259182.html
Copyright © 2020-2023  润新知