.NET Core中的中间件

    在.NET Core中,中间件(Middleware)是处理HTTP请求和响应的核心组件,被组织成一个请求处理管道,每个中间件都可以在请求到达最终处理程序之前或之后执行操作。可以实现如身份验证、路由、日志记录、异常处理、静态文件服务等各种功能。

    中间件是HTTP请求管道中的一个处理单元,负责处理传入的HTTP请求和返回的HTTP响应。每个中间件都有如下职责:

      1.处理请求:对请求进行预处理(修改请求内容、验证身份等)。

      2.决定是否继续传递请求:可以选择将请求传递给下一个中间件或者直接返回响应(短路请求管道)。

      3.处理响应:可以在响应返回给客户端之前进行后处理(如添加响应头,记录日志等)。

 

    中间件的工作原理

      1.请求进入管道:

        1.当一个HTTP请求进入应用程序时,它首先通过一系列的中间件组件。

        2.每个中间件都有机会处理请求,并决定是否将请求传递给下一个中间件。

      2.中间件的执行顺序:

        1.按照添加的顺序依次执行

      3.中间件的组成:

        1.通常是一个委托或者是实现了IMiddleware接口的类

      4.中间件的执行流程:

        1.当请求进入中间件时,中间件可以选择处理请求并直接返回响应(短路请求管道),将请求传递给下一个中间件(调用next(context))

        2.如果请求调用了next(context),那么请求将继续传递到下一个中间件

        3.当请求通过所有中间件后,最终的处理程序将处理请求并生成响应

        4.响应将按照相反的顺序通过中间件管道返回给客户端

 

   常见的中间件及其工作原理

      1.身份验证中间件(Authentication Middleware)

        作用:用于处理用户身份验证。

        工作原理:

          1.在请求到达控制器之前,身份验证中间件会验证请求中是否包含有效的身份验证信息(如JWT令牌、Cookie等)

          2.如果身份验证成功,中间件会将用户信息存储在HttpContext.User中

          3.如果身份验证失败,重定向到登录页面或返回401未授权响应

        示例:

          public void Configure(IApplicationBuilder app)

          {

              app.UseAuthentication();    //启用身份验证

              app.UseAuthorzation();     //启用授权

          }

      2.路由中间件(Routing Middleware)

      3.静态文件中间件(Static Files Middleware)

      4.异常处理中间件(Exception Handing Middleware)

      5.日志记录中间件(logging Middleware)

 

    自定义中间件

      创建自定义中间件来处理特定的需求。自定义中间件通常时一个类,它包含一个Invoke或InvokeAsync方法,该方法接收HttpContext和一个RequestDelegate参数

        示例:      

复制代码
 1 public class MyMiddleware
 2 {
 3         private readonly RequestDelegate _next;
 4 
 5         public MyMiddleware(RequestDelegate next)
 6         {
 7                _next = next;
 8          }
 9 
10         public async task InvokeAsync(HttpContext context)
11         {
12               //在调用下一个中间件之前执行的操作
13               await context.Response.WriteAsync("MyMiddleware: Befor \n");
14 
15               //调用下一个中间件
16               await _next(context);
17 
18              //在调用下一个中间件之后执行的操作
19              await context.Response.WriteAsync("MyMiddleware: Befor \n");
20          }
21 }                
复制代码

 

posted @   江渔湖  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示