ASP.NET Core SignalR 中的 IHttpContextAccessor/HttpContext

注意

这不是本文的最新版本。 要查看当前版本,请参阅本文的 .NET 9 版本

重要

此信息与在商业发布之前可能进行大幅修改的预发布产品有关。 Microsoft对此处提供的信息不作任何明示或暗示的保证。

有关当前版本,请参阅本文的 .NET 9 版本

通常,应避免使用 SignalRIHttpContextAccessor/HttpContext,因为有效的 HttpContext 并不总是可用的。 在大多数情况下,上下文不存在(null)。

即使 HttpContext 实例可用,上下文也依赖于传输:

  • WebSocket 由于初始握手而接收单个上下文。
  • 长轮询根据客户端“轮询”请求接收新上下文。
  • SignalR 服务接收模拟/伪造/填充码上下文。

在 SignalR 中心内工作时,可以使用 GetHttpContextExtensions.GetHttpContext 方法直接访问 HttpContext。 此方法返回当前连接的 HttpContext;如果连接未与 HTTP 请求关联,则返回 null。 这对于直接在中心内检索 HTTP 连接信息(如标头和查询字符串)特别有用。 建议通过 IHttpContextAccessor 调用此方法,以便在中心内访问 HttpContext。 有关详细信息,请参阅 ASP.NET Core SignalR中的使用中心。

有关 ASP.NET Core Blazor 应用中 IHttpContextAccessor/HttpContext 的指导,请参阅 ASP.NET Core Blazor 应用中的 IHttpContextAccessor/HttpContext