ASP.NET Core Blazor 应用中的 IHttpContextAccessor/HttpContext

注意

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

重要

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

请参阅本文 .NET 9 版本以获取当前发行版的信息。

通常应避免使用 IHttpContextAccessor 进行交互式渲染,因为并不总是能获得有效的 HttpContext

IHttpContextAccessor 可用于在服务器上静态呈现的组件。 但是,,我们建议尽可能避免它。

HttpContext 只能在用于常规任务的 静态呈现根组件 中用作 级联参数,例如检查和修改 App 组件中的标头或其他属性Components/App.razor。 对于交互式呈现,该值始终 null

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

在交互式呈现期间,HttpContext 实例甚至可能不存在。 对于交互式组件中需要 HttpContext 的情况,我们建议将上下文数据从服务器传输到 永久性组件状态

有关 高级 极端案例†的其他上下文,请参阅以下文章中的讨论:

大多数开发者在构建和维护 Blazor 应用时,只要遵循本文中的一般指导,就不需要深入探讨高级概念。

请勿在服务器端 Blazor 应用的 Razor 组件中直接或间接使用 IHttpContextAccessor/HttpContext Blazor 应用在 ASP.NET 核心管道上下文外部运行。 HttpContext 不能保证在 IHttpContextAccessor内可用,并且不保证 HttpContext 保留启动 Blazor 应用的上下文。

建议在应用的初始呈现期间通过根组件参数将请求状态传递给 Blazor 应用。 或者,应用可以将数据复制到根组件的初始化生命周期事件中的作用域服务中,以便在应用中使用。 有关详细信息,请参阅 ASP.NET 核心服务器端和 Blazor Web App 其他安全方案

服务器端 Blazor 安全性的一个关键方面是,在建立 Blazor 线路后,附加到给定线路的用户可能会在某个时间点更新,但 IHttpContextAccessor不会更新。 有关使用自定义服务解决这种情况的详细信息,请参阅 ASP.NET 核心服务器端和 Blazor Web App 其他安全方案

有关 ASP.NET Core SignalR中 IHttpContextAccessorHttpContext 的指导,请参阅 ASP.NET Core SignalR中的IHttpContextAccessor/HttpContext。