Поделиться через


IHttpContextAccessor / HttpContext в ASP.NET Core SignalR

Заметка

Это не последняя версия этой статьи. Сведения о текущем выпуске см. в разделе статьив версии .NET 9.

Важный

Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Корпорация Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых в отношении информации, предоставленной здесь.

Сведения о текущем выпуске см. в версии .NET 9 этой статьи.

IHttpContextAccessor / HttpContext обычно следует избегать с SignalR, так как допустимый HttpContext не всегда доступен. В большинстве случаев контекст не существует (null).

Даже если доступен экземпляр HttpContext, контекст зависит от транспорта:

  • WebSockets получает один контекст в результате начального рукопожатия.
  • Длительное опросывание получает новый контекст для каждого клиентского запроса.
  • Служба SignalR получает имитированный или фальшивый контекст.

При работе в центре SignalR доступ к HttpContext можно получить непосредственно с помощью метода GetHttpContextExtensions.GetHttpContext. Этот метод возвращает HttpContext текущего подключения или null, если соединение не связано с HTTP-запросом. Это особенно полезно для получения сведений о подключении HTTP, таких как заголовки и строки запроса, непосредственно в узле. Мы рекомендуем вызывать этот метод через IHttpContextAccessor для доступа к HttpContext в центре. Дополнительные сведения см. в разделе Использование центров в ASP.NET Core SignalR.

Для получения руководства по IHttpContextAccessor/HttpContext в приложениях ASP.NET Core Blazor, см. раздел IHttpContextAccessor/HttpContext в приложениях ASP.NET Core Blazor.