ASP.NET Core IHttpContextAccessor 中的 /HttpContextSignalR

注意

这不是本文的最新版本。 有关当前版本,请参阅 本文的 .NET 10 版本

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

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

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

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

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