ASP.NET Core 中的 Request Feature
ASP.NET Core 中的 Request Feature
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/request-features?view=aspnetcore-6.0
在应用程序对象和中间件中所用来处理请求的 HttpContext API 有一个被称为 feature 接口 的底层抽象。每个 feature 提供器提供一个通过 HttpContext 暴露出来的小粒度功能子集。这样在不需要重新整个实现 HttpContext 的情况下处理入站请求,而这些接口可以被服务器或者中间件添加、修改、封装、替换,或者甚至被删除掉。当测试的时候,它们还可以被用来 mock 功能。
Feature 集合
HttpContext 的 Features 属性提供了针对当前请求访问这些 feature 接口的入口。由于该特性集是可变的,甚至是在请求处理过程中,中间件可以用来修改该特性集,并添加其它的特性。有些高级的 feature 只能通过特性集的接口来访问。
Feature 接口
在 Microsoft.AspNetCore.Http.Features 中,ASP.NET Core 定义了一系列的常用 HTTP 特性接口,它们被各种中间件和服务器所共享,用于它们所支持的特性。服务器和中间件也可以提供它们自己的接口来支持附加的功能。
大多数的特性接口提供可选的亮点功能,它们所关联的 HttpContext API 则提供当没有提供特性时的默认功能。下面所列出的一些特性接口被标记为必须的,因为它们提供核心的请求和响应功能,它们必须被实现以支持对请求的处理。
下面的接口来自 Microsoft.AspNetCore.Http.Features
IHttpRequestFeature: 定义 HTTP 请求结构,包括协议、路径、查询参数、请求头以及请求体。该特性是处理请求所必须的。
IHttpResponseFeature: 定义 HTTP 响应结构,包括状态码、响应头以及响应体。该特性是处理请求所必须的。
IHttpResponseBodyFeature: 定义通过各种方式输出响应体,使用
Stream或者PipeWriter或者文件。该特性是处理请求所必须的。它替换了IHttpResponseFeature.Body和IHttpSendFileFeatureIHttpAuthenticationFeature: 持有当前请求相关的 ClaimsPrincipal
IFormFeature: 用于解析和缓存入站的 HTTP 请求和提交的 multipart 表单。
IHttpBodyControlFeature: 用来控制对于请求或者响应是否允许同步 IO 操作。
IHttpActivityFeature: 用来为 diagnostic 监听器添加 Activity 信息。注意它出现在 .NET 6 中。
IHttpConnectionFeature: 定义网络连接的 id 属性,本地与远程地址和端口。
IHttpMaxRequestBodySizeFeature: 控制对于当前请求来说,最大可支持的请求体大小。
IHttpRequestBodyDetectionFeature: 识别当前请求是否含有请求体。从 .NET 5 开始支持。
IHttpRequestIdentifierFeature: 添加可以用来唯一标识请求的属性。
IHttpRequestLifetimeFeature: 定义支持中断网络连接,以及检测当前请求是否已经被提前终止。例如由于客户端断开连接。
IHttpRequestTrailersFeature: 提供访问请求的 trailer 头,如果存在的话。例如 HTTP/1.1 中的块化请求体,或者 HTTP/2 中的 Trailer 请求头。
IHttpResetFeature: 用来对于支持它们的协议,比如 HTTP/2 或者 HTTP/3 发送重置消息。
IHttpResponseTrailersFeature: 如果支持的话,为应用程序启用响应 trailer 头支持。
IHttpUpgradeFeature: 定义对于 HTTP Upgrade 的支持。如果服务器支持切换协议的话,它支持客户端指定其希望使用的协议。
IHttpWebSocketFeature: 定义支持 Web socket 的 API
IHttpsCompressionFeature: 控制在 HTTPS 连接上响应是否被压缩。
IItemsFeature: 为请求应用程序状态存储 Items 集合
IQueryFeature: 解析和缓存查询串
IRequestBodyPipeFeature: 将请求体表示为 PipeReader 形式
IRequestCookiesFeature: 解析和缓存请求中的
Cookie请求头中的值IResponseCookiesFeature: 控制如何应用到响应头的
Set-Cookie来控制响应CookieIServerVariablesFeature: 该特性提供访问服务器变量的功能,例如通过 IIS 服务器提供的变量。
IServiceProvidersFeature: 提供访问使用作用域服务的
IServiceProvider。与依赖注入相关ISessionFeature: 对于支持的用户会话,定义了
ISessionFactory和ISession抽象。ISessionFeature是通过 SessionMiddleware 中间件 所实现的 ( 见:ASP.NET Core 中的会话 )ITlsConnectionFeature: 定义提取客户端证书的 API
ITlsTokenBindingFeature: 定义操作 TLS 令牌绑定参数的 API
ITrackingConsentFeature: 用于查询、授予和撤销有关存储与网站活动和功能相关的用户信息的用户同意。
ASP.NET Core 中的 Request Feature的更多相关文章
- ASP.NET Core 中读取 Request.Body 的正确姿势
ASP.NET Core 中的 Request.Body 虽然是一个 Stream ,但它是一个与众不同的 Stream —— 不允许 Request.Body.Position=0 ,这就意味着只能 ...
- asp .net core Get raw request.
小弟初来乍到,分享一些工作学习中遇到的问题和解决方式,如有不准确或是有错误的地方,希望不吝赐教,谢过了. --Dogtwo 背景: 一个代理服务器BK,接收前端A发送的请求,记录log,并转发给 ...
- 采用异步来实现重新连接服务器或者重新启动服务 C#中类的属性的获取 SignalR2简易数据看板演示 C#动态调用泛型类、泛型方法 asp .net core Get raw request. 从壹开始前后端分离[.NetCore 不定期更新] 38 ║自动初始化数据库
采用异步来实现重新连接服务器或者重新启动服务 开启异步监听,不会导致主线程的堵塞,在服务异常断开后一直检测重新连接服务,成功连接服务后通知各个注册的客户端! #region 检测断线并重连OPC服务 ...
- 给你的 ASP.NET Core 程序插上 Feature Flag 的翅膀
前言 我们知道,目前大多数应用程序在正式发布到生产环境之前都会经历多个不同的测试环境,通过让应用程序在多个不同的环境中运行来及时发现并解决问题,避免在线上发生不必要的损失.这是对于整个软件的发布流程来 ...
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- ASP.NET Core中的依赖注入(1):控制反转(IoC)
ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...
- ASP.NET Core中的依赖注入(2):依赖注入(DI)
IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用"好莱坞原则"是应用程序以被动的方式实现对流程的定制.我们可以采用若干设计 ...
- ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化
原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...
- ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态
原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...
- [转]ASP.NET Core 中的那些认证中间件及一些重要知识点
本文转自:http://www.qingruanit.net/c_all/article_6645.html 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系 ...
随机推荐
- 将Sublime Text添加到鼠标右键
事件起因: 在众多 文本文档软件中,个人用过比较多,notepad++ / Edit / EditPlus / notepad-- / Sublime Text 等等,但是比较偏爱的还是 Subl ...
- neo4j 统计多个节点之间关系总和的写法-包含多个collect合并成一个并去重操作
在使用neo4j数据库时,会遇到计算与指定节点产生关联的数量统计需求,例如指定6个节点1,2,3,4,5,6需要找出与这6个节点中4个节点有关联的节点(要求排除这6个节点的数据) 先看实现查询语句: ...
- 如何快速定位 Linux Panic 出错的代码行
问题描述 内核调试中最常见的一个问题是:内核Panic后,如何快速定位到出错的代码行? 就是这样一个常见的问题,面试过的大部分同学都未能很好地回答,这里希望能够做很彻底地解答. 问题分析 内核Pani ...
- Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。
通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒:Java8 time包所有相关类都支 ...
- 常见的mysql 函数 字符串函数
1. concat (s1,s2,....sn) 字符串拼接,将 s1,s2,... sn 拼接成一个字符串 : 2. lower(str) 将字符串全部转换成小写 3. upper(str) 将字符 ...
- 66.有没有碰到过数组响应丢失(问的是ref和reactive的用法,什么情况下用)
由于vue3使用proxy,对于对象和数组都不能直接整个赋值. 直接赋值丢失了响应性 只有push或者根据索引遍历赋值才可以保留reactive数组的响应性 : 可以使用 toRefs 解决这个问 ...
- Fluent Operator 2.5.0 发布:新增多个插件
日前,Fluent Operator 发布了 v2.5.0. Fluent Operator v2.5.0 新增 11 个 features, 其中 Fluent Bit 新增支持 7 个插件, Fl ...
- C#/.NET/.NET Core学习路线集合,学习不迷路!
前言 C#..NET..NET Core.WPF.WinForm.Unity等相关技术的学习.工作路线集合(持续更新)!!! 全面的C#/.NET/.NET Core学习.工作.面试指南:https: ...
- 为什么说Kafka还不是完美的实时数据通道
本文主要谈谈Kafka用于实时数据通道场景的缺陷,以及如何在架构上进行弥补. Kafka归属于消息队列类产品,其他竞品还有RabbitMQ.RocketMQ等,总的来说它们都是基于生产者.中介和消费者 ...
- Newstar_week1-2_wp
week1 wp crypto 一眼秒了 n费马分解再rsa flag: import libnum import gmpy2 from Crypto.Util.number import * p = ...