ASP.NET Core 中的请求功能

作者:Steve Smith

应用程序和中间件用于处理请求的 HttpContext API 具有一个抽象层,它将其称为“功能接口”。 每个功能接口都提供 HttpContext 公开的功能的粒度子集。 在处理请求时,服务器或中间件可以添加、修改、包装、替换甚至删除这些接口,而不必重新实现整个 HttpContext。 它们还可以在测试时用于模拟功能。

功能集合

HttpContextFeatures 属性提供对当前请求的功能接口集合的访问。 由于功能集合即使在请求的上下文中也是可变的,所以可使用中间件来修改集合并添加对其他功能的支持。 某些高级功能只能通过功能集合访问关联接口提供。

功能接口

ASP.NET Core 在 Microsoft.AspNetCore.Http.Features 中定义了许多常见的 HTTP 功能接口,各种服务器和中间件共享这些接口来标识其支持的功能。 服务器和中间件还可以提供自己的具有附加功能的接口。

大多数功能接口都提供可选的点亮功能,如果该功能不存在,则它们的相关 HttpContext API 提供默认值。 以下内容中会根据需要指出几个接口,因为它们提供核心请求和响应功能,必须实现它们才能处理请求。

以下功能接口来自 Microsoft.AspNetCore.Http.Features

IHttpRequestFeature:定义 HTTP 请求的结构,包括协议、路径、查询字符串、标头和正文。 此功能是处理请求所必需的。

IHttpResponseFeature:定义 HTTP 响应的结构,包括状态代码、标头和响应的正文。 此功能是处理请求所必需的。

IHttpResponseBodyFeature:定义使用 StreamPipeWriter 或文件写出响应正文的不同方式。 此功能是处理请求所必需的。 这会替换 IHttpResponseFeature.BodyIHttpSendFileFeature

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:定义支持 Web 套接字的 API。

IHttpsCompressionFeature:控制是否应通过 HTTPS 连接使用响应压缩。

IItemsFeature:存储每个请求应用程序状态的 Items 集合。

IQueryFeature:分析并缓存查询字符串。

IRequestBodyPipeFeature:将请求正文表示为 PipeReader

IRequestCookiesFeature:分析并缓存请求 Cookie 标头值。

IResponseCookiesFeature:控制如何将响应 cookie 应用到 Set-Cookie 标头。

IServerVariablesFeature:此功能可用于访问请求服务器变量,如 IIS 提供的变量。

IServiceProvidersFeature:提供对具有限定范围的请求服务的 IServiceProvider 的访问。

ISessionFeature:为支持用户会话定义 ISessionFactoryISession 抽象。 ISessionFeatureSessionMiddleware 实现(参阅 ASP.NET Core 中的会话)。

ITlsConnectionFeature:定义用于检索客户端证书的 API。

ITlsTokenBindingFeature:定义使用 TLS 令牌绑定参数的方法。

ITrackingConsentFeature:用于查询、授予和撤消有关存储与站点活动和功能相关的用户信息的用户同意。

其他资源