ASP.NET Core 中的请求功能
作者:Steve Smith
应用程序和中间件用于处理请求的 HttpContext
API 具有一个抽象层,它将其称为“功能接口”。 每个功能接口都提供 HttpContext
公开的功能的粒度子集。 在处理请求时,服务器或中间件可以添加、修改、包装、替换甚至删除这些接口,而不必重新实现整个 HttpContext
。 它们还可以在测试时用于模拟功能。
功能集合
HttpContext
的 Features 属性提供对当前请求的功能接口集合的访问。 由于功能集合即使在请求的上下文中也是可变的,所以可使用中间件来修改集合并添加对其他功能的支持。 某些高级功能只能通过功能集合访问关联接口提供。
功能接口
ASP.NET Core 在 Microsoft.AspNetCore.Http.Features 中定义了许多常见的 HTTP 功能接口,各种服务器和中间件共享这些接口来标识其支持的功能。 服务器和中间件还可以提供自己的具有附加功能的接口。
大多数功能接口都提供可选的点亮功能,如果该功能不存在,则它们的相关 HttpContext
API 提供默认值。 以下内容中会根据需要指出几个接口,因为它们提供核心请求和响应功能,必须实现它们才能处理请求。
以下功能接口来自 Microsoft.AspNetCore.Http.Features:
IHttpRequestFeature:定义 HTTP 请求的结构,包括协议、路径、查询字符串、标头和正文。 此功能是处理请求所必需的。
IHttpResponseFeature:定义 HTTP 响应的结构,包括状态代码、标头和响应的正文。 此功能是处理请求所必需的。
IHttpResponseBodyFeature:定义使用 Stream
、PipeWriter
或文件写出响应正文的不同方式。 此功能是处理请求所必需的。 这会替换 IHttpResponseFeature.Body
和 IHttpSendFileFeature
。
IHttpAuthenticationFeature:保存当前与请求关联的 ClaimsPrincipal。
IFormFeature:用于分析和缓存传入的 HTTP 和多部分表单提交。
IHttpBodyControlFeature:用于控制请求或响应正文是否允许同步 IO 操作。
IHttpActivityFeature
:用于添加诊断侦听器的 Activity
信息。
IHttpBufferingFeature:定义禁用请求和/或响应缓冲的方法。
IHttpConnectionFeature:为连接 ID 以及本地和远程地址和端口定义属性。
IHttpMaxRequestBodySizeFeature:控制当前请求允许的最大请求正文大小。
IHttpRequestBodyDetectionFeature
:指示请求是否可以有正文。
IHttpRequestIdentifierFeature:添加一个可以实现的属性来唯一标识请求。
IHttpRequestLifetimeFeature:定义支持中止连接,或者检测是否已提前终止请求(如由于客户端断开连接)。
IHttpRequestTrailersFeature:提供对请求尾部标头(如果有)的访问权限。
IHttpResetFeature:用于为支持它们的协议(如 HTTP/2 或 HTTP/3)发送重置消息。
IHttpResponseTrailersFeature:允许应用程序提供响应尾部标头(如支持)。
IHttpSendFileFeature:定义异步发送文件的方法。
IHttpUpgradeFeature:定义对 HTTP 升级的支持,允许客户端指定在服务器需要切换协议时要使用的其他协议。
IHttpWebSocketFeature:定义支持 WebSocket 的 API。
IHttpsCompressionFeature:控制是否应通过 HTTPS 连接使用响应压缩。
IItemsFeature:存储每个请求应用程序状态的 Items 集合。
IQueryFeature:分析并缓存查询字符串。
IRequestBodyPipeFeature:将请求正文表示为 PipeReader。
IRequestCookiesFeature:分析并缓存请求 Cookie
标头值。
IResponseCookiesFeature:控制如何将响应 Cookie 应用到 Set-Cookie
标头。
IServerVariablesFeature:此功能可用于访问请求服务器变量,如 IIS 提供的变量。
IServiceProvidersFeature:提供对具有限定范围的请求服务的 IServiceProvider 的访问。
ISessionFeature:为支持用户会话定义 ISessionFactory
和 ISession 抽象。 ISessionFeature
由 SessionMiddleware 实现(参阅 ASP.NET Core 中的会话)。
ITlsConnectionFeature:定义用于检索客户端证书的 API。
ITlsTokenBindingFeature:定义使用 TLS 令牌绑定参数的方法。
ITrackingConsentFeature:用于查询、授予和撤消有关存储与站点活动和功能相关的用户信息的用户同意。