首页 > 其他分享 >.net 中间件

.net 中间件

时间:2023-05-16 12:23:40浏览次数:28  
标签:Core ASP 中间件 Filter MVC net NET

广义上来讲:Tomcat、WebLogic、Redis、IIS都是中间件; 狭义上来讲,也就是基于.NET CORE技术本身来说,中间件指的是ASP.NET Core中的一个组件。 中间件是ASP.NET Core的核心组件,MVC框架、响应缓存,身份验证、Cors、Swagger等都是内置中间件。 中间件由前逻辑,next,后逻辑3部分组成,前逻辑为第一段要执行的逻辑代码,next为指向下一个中间件的调用,后逻辑为从一个中间件执行返回所执行的逻辑代码。 每个HTTP请求都要经历一系列中间件的处理,每个中间件对于请求进行特定的处理后,再转到下一个中间件,最终的业务逻辑代码执行完成后,响应的内容也回按照处理的相反顺序进行处理,然后形成HTTP响应报文返回给客户端。 中间件组成一个管道,整个ASP.NET Core的执行过程就是HTTP请求和响应按照中间件组装的顺序在中间件之间流转的过程。开发人员可以对组成管道的中间件按照需要进行自由组合。 0 中间件的三个概念 Map、Use和Run。Map用来定义一个管道可以处理哪些请求,Use和Run用来定义管道,一个管道由若干个Use和Run组成,每个Use引入一个中间件,而Run是用来执行最终的核心应用逻辑。   0 0 这里边需要注意几点:

  1. use本身是从上到下执行的,所以需要注意顺序,有的需要考虑先后
  2. run之后的,不会被执行
下边的例子更容易理解,中间件的三要素,也就是Map引流,use引入中间件,run执行核心逻辑。 0 这个例子并不符合框架的规范,一般要求只有一个中间件,并且一般为最后一个中间件来输出内容,其他中间件不要输出内容,一旦中间的中间件输出内容,那么就返回,不要再做next.Invoke(),避免造成Http响应报文的混乱。 自定义中间件
  1. 如果中间件的代码比较复杂,或者我们需要重复使用一个中间件的话,我们最好把中间件的代码放到一个单独的中间件类中
  2. 中间件类是要给普通的.net类,它不需要继承任何父类或者实现任何接口,但是这个类需要有一个构造方法,构造方法至少要有一个RequestDelegate类型的参数,这个参数用来指向下一个中间件。这个类还需要定义一个名字为Invoke或InvokeAsync的方法,方法至少有一个HttpContext类型的参数,方法的返回值必须是Task类型。中间件类的构造方法和Invoke(或InvokeAsync)方法还可以定义其他参数,其他参数的值会通过依赖关系注入自动赋值。
0 书写完成中间件类之后,再program.cs文件中用app.UseMiddleware<>() 来引入中间件。 0 中间件和Filter的区别 中间件是ASN.NET Core这个基础提供的功能,而Filter是ASP.NET Core MVC中提供的功能。ASP.NET Core MVC 是MVC中间件提供的框架,而Filter属于MVC中间件提供的功能。 0
  1. 中间件可以处理所有请求,而Filter只能处理对控制器的请求;中间件运行再一个更底层,更抽象的界别,因此再中间件中无法处理MVC中间件特有的概念。
  2. 中间件和Filter可以完成很多相似的功能。比如:“未处理异常中间件”和“未处理异常Filter”;“请求限流中间件”和“请求限流Filter”。
  3. 优先选择使用中间件;但是如果这个组件只针对MVC或者需要调用一些MVC相关的类的时候,我们只能选择Filter。

标签:Core,ASP,中间件,Filter,MVC,net,NET
From: https://www.cnblogs.com/pangzili/p/17404553.html

相关文章

  • .NET 使用Camunda快速入门
    简介参考:https://www.cnblogs.com/lvdeyinBlog/p/16095603.html 一.工作流介绍1.什么是工作流工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流将一套大的业务逻辑分解成业务逻辑段,并统一控制这些业务逻辑段的执行条件,执行顺序以及相互通信......
  • 创建.Net项目模板包
    1.准备解决方案打包文件创建文件夹Template在Template下创建template.csproj,内容如下<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><PackageType>Template</PackageType><PackageVersion>1.0.0</PackageVersion>......
  • Netty高手必知必会的ChannelHandlerContext技巧
    1概述ChannelHandlerContext代表ChannelHandler和ChannelPipeline之间的关联,每当有ChannelHandler添加到ChannelPipeline,都会创建ChannelHandlerContext。1.1主要功能管理它所关联的ChannelHandler和在同一个ChannelPipeline中的其他ChannelHandler之间的交互。Ch......
  • koa-body 中间件解析原理
    常见的请求数据类型:application/json 常见于post请求未经过任何处理以json的格式通过body传输application/x-www-form-urlencoded 提交的表单数据会转换为键值对并按照key1=val&key2=val2的方式进行编码,常见于POST提交表单以及原生的处理方式。multipart/form-data......
  • Docker+jenlins+gitee部署net6
    1.Docker安装。Docker->虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。1、选择要安装的平台Docker要求CentOS系统的内核版本高于3.10uname-r#通过uname-r命令查看你当前的内核版本安装文档地址2、选择......
  • dotnet6 项目在Docker部署报错 The type initializer for 'Gdip' threw an exception.
    asp.netcore部署在docker中,使用了System.Drawing.Common包,在容器中使用时报错“Thetypeinitializerfor'Gdip'threwanexception.”原因:因为System.Drawing.Common在跨平台的兼容性不够理想,官方设置为后续版本只能在Windows平台使用,默认是不开启的,需要在运行时配置中开启......
  • 网络 -- Internet上的音频视频
    在internet上传输音频视频面临的问题区别:1.音频视频:占用的带宽高网速恒定延迟低2.数据信息:对带宽网速是否恒定延迟要求不高1.延迟:对于非交互式的音频视频影响不大(发送延迟传播延迟排队延迟处理延迟)2.带宽不稳定:设置缓存 安装流媒体服务目前因特网提供的音频......
  • 基于.Net5+Vue+iView前后端分离通用权限开源系统
    在Github上,.Net通用的权限框架非常多,功能也都比较强大,但是对于很多初学者来说,想要从零学习框架的搭建,就比较困难了。所以,今天给大家推荐一套比较简单的前后端分离通用权限系统。项目简介这是一个基于.Net5+Vue+iView开发的、前后端分离通用权限系统,系统采用三层架构,该项目功能......
  • Intel(R) Ethernet Controller X710驱动升级
    环境CentOSLinuxrelease7.9.2009(Core)升级先查看原驱动版本[root@xcdcs~]#lspci|grepnet01:00.0Ethernetcontroller:IntelCorporationEthernetControllerX710for10GbESFP+(rev02)01:00.1Ethernetcontroller:IntelCorporationEthernetController......
  • NetBackup 10.2 新功能介绍:PostgreSQL 和 MySQL 自动化恢复达成
    VeritasNetBackup10.2(Unix,Linux,Windows)下载-一流的企业备份和恢复原文来自:VERITAS中文社区2023-04-27在执行恢复任务时,手动提取、更新数据库和实例并将其附加到PostgreSQL和MySQL是常规操作。而在最新的NetBackup10.2版本中,执行恢复已不再需要上述手动流程......