Asp.NetCore Web开发之请求管道和中间件(一)

2022-03-29 09:30:10 浏览数 (1)

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

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

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

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

代码语言:javascript复制
 if (env.IsDevelopment())
 {
    app.UseDeveloperExceptionPage();
 }
 else
 {
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
 }

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

代码语言:javascript复制
app.UseEndpoints(endpoints =>
  {
      endpoints.MapControllerRoute(
          name: "default",
          pattern: "{controller=Home}/{action=Index}/{id?}");
  });

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

代码语言:javascript复制
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

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

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

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

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

本节到此结束...

0 人点赞