.NET Core中的中间件

news/2025/2/25 18:44:52/文章来源:https://www.cnblogs.com/jiangyuhu/p/18736990

    在.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 }                

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889693.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 啥样的索引能提高查询性能呢?

前言 在前面几章中,我们知道了页里面是如何存储的,页又是如何编排的。 这样我们知道了,如何定位到页,如何定位到行了,这些对我们索引的了解非常有帮助的。 知道这些后,那么我们如何利用索引查询呢? 也就是说我们如何利用这种数据结构呢? 是不是全部的查询都能通过索引去…

06 常用损失函数介绍

在前文中我们使用的损失函数都是均方误差(MSE,Mean Squared Error),本篇介绍一些其他的损失函数形式,以及他们的不同用途。 1. 回归任务常用损失函数 1.1 均方误差(MSE, Mean Squared Error) 均方误差(MSE)是回归任务中最常用的损失函数之一,用于衡量模型预测值与真实…

啦啦啦啦啦啦啦啦啦

啦啦啦 啦啦啦啦啦啦啦啦啦 ABC221G 神秘题,将坐标轴转 \(45\),然后 bitset 优化背包,记录路径把刚刚被更新的找出来,然后 _Find_next,每个点只会记一次。 AGC050a 神秘题,想到 \(\log\),然后发现一下位置 \(x\) 走十次能到的区间是 \([1024x,1024x+1023]\),区间长度够…

破解 vLLM + DeepSeek 规模化部署的“不可能三角”

通过 FC GPU 预留实例的闲置计费功能,企业用户能在充分利用 vLLM 的强大功能的同时找到成本、性能、稳定的最佳平衡点,并保持开发和运维的高效性。无论是将 FC vLLM 函数直接对外提供服务,还是深度集成到现有系统中,或是通过 CAP 还是魔搭来简化部署,都能找到满足您业务需…

条形码编码规则全解析:从黑白条纹到数字世界的转换密码

条形码的编码规则是将字符(数字、字母等)转换为特定黑白条纹或矩阵结构的标准化方法,核心目的是让机器能够快速、准确地识别和解析信息。以下是常见条形码编码规则的简介: 一维条形码编码规则 1. ​基本原理通过不同宽度的黑白条纹​(或空格)组合表示字符。 每个字符对应…

[汽车电子/车联网] CANoe

概述:CANoe CAN 全家桶区别: CANoe vs CanalyzerCANoe和CANalyzer使用方法类似(简直可以说 相同)。 都可用于simulation,区别在于CANalyzer只能模拟单个Node,而CANoe可以同时模拟多个Node。如果入门学习了CANoe,就不用入门学习CANalyzer了。安装指南 安装 CANoeDemo on …

璞华易研PLM荣登软服之家多项榜单,PLM+AI为流程行业提供产品创新引擎

近日,国内知名软件与服务评测平台软服之家发布了多个PLM(Product Lifecycle Management,产品全生命周期管理)榜单,帮助用户了解PLM领域表现卓越的软件产品和服务。在软服之家的多项榜单中,璞华易研PLM凭借其自主研发能力与行业深耕优势,在流程行业、电子信息、装备制造等…

ELK 原理介绍及实践详解

介绍了ELK(Elasticsearch, Logstash, Kibana)在大规模日志管理中的重要性,阐述了ELK解决日志分析的挑战,如日志收集、传输、存储和分析。文章详细讲解了ELK的组成部分,包括Filebeat的工作原理、Logstash的输入、过滤和输出阶段,以及Kibana的分析和可视化功能。此外,还提…

工信部人才交流中心PostgreSQL认证考试 - 聊一下更多精彩

在数字经济高速发展的今天,数据库作为信息基础设施的核心组件,其技术自主性与人才储备已成为国家战略竞争力的关键。工业和信息化部人才交流中心(以下简称“工信人才”)推出PostgreSQL认证考试,不仅是对技术发展趋势的精准响应,更是推动信创产业生态建设、填补数据库人才缺…

单链表与单循环链表的C语言实现

单链表与单循环链表的C语言实现 目录单链表与单循环链表的C语言实现单链表的增删查改单循环链表的增删查改 单链表的增删查改 /*单链表*/#include<stdio.h> #include<stdlib.h>typedef struct Node{int data;struct Node* next; }Node;Node* initList(){Node* node…

可能是全球最快捷的修改hosts文件方式

使用快捷方式一键修改hosts文件。 下面请看VCR:其实关键的命令只有一条:powershell.exe -Command "Start-Process -FilePath notepad.exe -Verb RunAs -ArgumentList "$env:SystemRoot\system32\drivers\etc\hosts""它使用记事本以管理员权限打开位于 C:…

KUKA机器人KR70伺服电机力矩不足维修攻略

库卡机器人作为先进的工业自动化解决方案,广泛应用于各种生产线中。然而,当出现KUKA机械手伺服马达力矩不足干燥的问题时,可能会严重影响其工作效率和性能。 一、库卡机器人电机力矩不足故障的原因 1. 电机老化:随着使用时间的增加,电机内部的零部件可能会出现磨损,导致力…