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

在应用程序对象和中间件中所用来处理请求的 API 有一个被称为 的底层抽象。每个 feature 提供器提供一个通过 暴露出来的小粒度功能子集。这样在不需要重新整个实现 的情况下处理入站请求,而这些接口可以被服务器或者中间件添加、修改、封装、替换,或者甚至被删除掉。当测试的时候,它们还可以被用来 mock 功能。

HttpContext
feature 接口
HttpContext
HttpContext

Feature 集合

的 属性提供了针对当前请求访问这些 feature 接口的入口。由于该特性集是可变的,甚至是在请求处理过程中,中间件可以用来修改该特性集,并添加其它的特性。有些高级的 feature 只能通过特性集的接口来访问。

HttpContext
Features

Feature 接口

在 Microsoft.AspNetCore.Http.Features 中,ASP.NET Core 定义了一系列的常用 HTTP 特性接口,它们被各种中间件和服务器所共享,用于它们所支持的特性。服务器和中间件也可以提供它们自己的接口来支持附加的功能。

大多数的特性接口提供可选的亮点功能,它们所关联的 API 则提供当没有提供特性时的默认功能。下面所列出的一些特性接口被标记为必须的,因为它们提供核心的请求和响应功能,它们必须被实现以支持对请求的处理。

HttpContext

下面的接口来自 Microsoft.AspNetCore.Http.Features

  • IHttpRequestFeature: 定义 HTTP 请求结构,包括协议、路径、查询参数、请求头以及请求体。该特性是处理请求所必须的。
  • IHttpResponseFeature: 定义 HTTP 响应结构,包括状态码、响应头以及响应体。该特性是处理请求所必须的。
  • IHttpResponseBodyFeature: 定义通过各种方式输出响应体,使用 Stream 或者 PipeWriter 或者文件。该特性是处理请求所必须的。它替换了 IHttpResponseFeature.Body 和 IHttpSendFileFeature
  • IHttpAuthenticationFeature: 持有当前请求相关的 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 来控制响应 Cookie
  • IServerVariablesFeature: 该特性提供访问服务器变量的功能,例如通过 IIS 服务器提供的变量。
  • IServiceProvidersFeature: 提供访问使用作用域服务的 IServiceProvider。与依赖注入相关
  • ISessionFeature: 对于支持的用户会话,定义了 ISessionFactory 和 ISession 抽象。ISessionFeature 是通过 SessionMiddleware 中间件 所实现的 ( 见:ASP.NET Core 中的会话 )
  • ITlsConnectionFeature: 定义提取客户端证书的 API
  • ITlsTokenBindingFeature: 定义操作 TLS 令牌绑定参数的 API
  • ITrackingConsentFeature: 用于查询、授予和撤销有关存储与网站活动和功能相关的用户信息的用户同意。
————————

ASP.NET Core 中的 Request Feature

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/request-features?view=aspnetcore-6.0

在应用程序对象和中间件中所用来处理请求的 API 有一个被称为 的底层抽象。每个 feature 提供器提供一个通过 暴露出来的小粒度功能子集。这样在不需要重新整个实现 的情况下处理入站请求,而这些接口可以被服务器或者中间件添加、修改、封装、替换,或者甚至被删除掉。当测试的时候,它们还可以被用来 mock 功能。

HttpContext
feature 接口
HttpContext
HttpContext

Feature 集合

的 属性提供了针对当前请求访问这些 feature 接口的入口。由于该特性集是可变的,甚至是在请求处理过程中,中间件可以用来修改该特性集,并添加其它的特性。有些高级的 feature 只能通过特性集的接口来访问。

HttpContext
Features

Feature 接口

在 Microsoft.AspNetCore.Http.Features 中,ASP.NET Core 定义了一系列的常用 HTTP 特性接口,它们被各种中间件和服务器所共享,用于它们所支持的特性。服务器和中间件也可以提供它们自己的接口来支持附加的功能。

大多数的特性接口提供可选的亮点功能,它们所关联的 API 则提供当没有提供特性时的默认功能。下面所列出的一些特性接口被标记为必须的,因为它们提供核心的请求和响应功能,它们必须被实现以支持对请求的处理。

HttpContext

下面的接口来自 Microsoft.AspNetCore.Http.Features

  • IHttpRequestFeature: 定义 HTTP 请求结构,包括协议、路径、查询参数、请求头以及请求体。该特性是处理请求所必须的。
  • IHttpResponseFeature: 定义 HTTP 响应结构,包括状态码、响应头以及响应体。该特性是处理请求所必须的。
  • IHttpResponseBodyFeature: 定义通过各种方式输出响应体,使用 Stream 或者 PipeWriter 或者文件。该特性是处理请求所必须的。它替换了 IHttpResponseFeature.Body 和 IHttpSendFileFeature
  • IHttpAuthenticationFeature: 持有当前请求相关的 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 来控制响应 Cookie
  • IServerVariablesFeature: 该特性提供访问服务器变量的功能,例如通过 IIS 服务器提供的变量。
  • IServiceProvidersFeature: 提供访问使用作用域服务的 IServiceProvider。与依赖注入相关
  • ISessionFeature: 对于支持的用户会话,定义了 ISessionFactory 和 ISession 抽象。ISessionFeature 是通过 SessionMiddleware 中间件 所实现的 ( 见:ASP.NET Core 中的会话 )
  • ITlsConnectionFeature: 定义提取客户端证书的 API
  • ITlsTokenBindingFeature: 定义操作 TLS 令牌绑定参数的 API
  • ITrackingConsentFeature: 用于查询、授予和撤销有关存储与网站活动和功能相关的用户信息的用户同意。