Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Это не последняя версия этой статьи. Для текущей версии см. версию .NET 9 этой статьи.
Это важно
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Корпорация Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых в отношении информации, предоставленной здесь.
Для текущей версии см. версию .NET 9 этой статьи.
IHttpContextAccessor обычно следует избегать при интерактивном рендеринге, так как допустимый HttpContext не всегда доступен.
IHttpContextAccessor можно использовать во время отрисовки на стороне статического сервера (статический SSR), например в статически отрисованных корневых компонентах, а также при использовании обработчика маркеров для вызовов веб-API на сервере. Рекомендуется избегать использования IHttpContextAccessor в случаях, когда не может быть гарантирован статический SSR или выполнение кода на сервере.
HttpContext можно использовать в качестве каскадного параметра только в статически отображаемых корневых компонентах или во время статического SSR для общих задач, таких как проверка и модификация заголовков или прочих свойств компонента App
(App.razor
). Значение null
во время интерактивной визуализации.
[CascadingParameter]
public HttpContext? HttpContext { get; set; }
Дополнительные сведения о дополнительном контексте в расширенных пограничных случаях† см. в следующих статьях:
-
HttpContext действителен в интерактивной серверной отрисовке страницы Blazor (
dotnet/AspNetCore.Docs
#34301) -
Последствия безопасности использования IHttpContextAccessor в Blazor Server (
dotnet/aspnetcore
#45699)
†Большинству разработчиков, занимающихся созданием и поддержкой 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.
ASP.NET Core