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


IHttpContextAccessor / HttpContextв приложениях ASP.NET Core Blazor

Замечание

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

Это важно

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

Для текущей версии см. версию .NET 9 этой статьи.

IHttpContextAccessor обычно следует избегать при интерактивном рендеринге, так как допустимый HttpContext не всегда доступен.

IHttpContextAccessor можно использовать во время отрисовки на стороне статического сервера (статический SSR), например в статически отрисованных корневых компонентах, а также при использовании обработчика маркеров для вызовов веб-API на сервере. Рекомендуется избегать использования IHttpContextAccessor в случаях, когда не может быть гарантирован статический SSR или выполнение кода на сервере.

HttpContext можно использовать в качестве каскадного параметра только в статически отображаемых корневых компонентах или во время статического SSR для общих задач, таких как проверка и модификация заголовков или прочих свойств компонента App (App.razor). Значение null во время интерактивной визуализации.

[CascadingParameter]
public HttpContext? HttpContext { get; set; }

Дополнительные сведения о дополнительном контексте в расширенных пограничных случаях† см. в следующих статьях:

†Большинству разработчиков, занимающихся созданием и поддержкой Blazor приложений, не нужно вникать в сложные концепции, если следуют общему руководству в этой статье. Самое важное, что нужно помнить, это то, что HttpContext является в основном серверной функцией запрос-ответ, которая в основном доступна на сервере во время статического SSR и создается только при установлении соединения с пользователем.

Не используйте IHttpContextAccessor/HttpContext прямо или косвенно в компонентах Razor серверных Blazor приложений. Blazor приложения выполняются вне контекста конвейера ASP.NET Core. HttpContext не гарантируется быть доступным в IHttpContextAccessor, так же как и HttpContext не обязательно сохраняет контекст, в котором было запущено приложение Blazor.

Рекомендуемый подход для передачи состояния запроса в приложение Blazor — это использовать параметры корневого компонента при первоначальной отрисовке приложения. В качестве альтернативы приложение может скопировать данные в сервис с ограниченной областью действия в событии жизненного цикла инициализации корневого компонента для использования по всему приложению. Дополнительные сведения см. в разделе о серверной части ASP.NET Core и Blazor Web App дополнительных сценариях безопасности.

Критически важный аспект безопасности Blazor на стороне сервера заключается в том, что пользователь, подключенный к заданному каналу, может быть обновлен в какой-то момент после установки канала Blazor, но IHttpContextAccessorне обновляется. Дополнительные сведения об устранении этой ситуации с пользовательскими службами см. в серверной стороне ASP.NET Core и Blazor Web App дополнительных сценариях безопасности.

Для получения рекомендаций по IHttpContextAccessor и HttpContext в ASP.NET Core SignalR, см. раздел IHttpContextAccessor/HttpContext в ASP.NET Core SignalR.