共用方式為


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 Core 管線內容之外執行。 HttpContext 不保證可在 IHttpContextAccessor內使用,而且不保證 HttpContext 會保存啟動 Blazor 應用程式的內容。

將要求狀態傳遞至 Blazor 應用程式的建議方法是透過應用程式首次渲染期間的根元件參數。 或者,應用程式可以將數據複製到根元件初始化生命週期事件中的範圍服務,以便跨應用程式使用。 如需詳細資訊,請參閱 ASP.NET Core 伺服器端和 Blazor Web App的其他安全性案例。

伺服器端 Blazor 安全性的重要層面是,在建立 Blazor 線路之後,附加至指定線路的使用者可能會在某個時間點更新,但 IHttpContextAccessor不會更新。 如需使用自訂服務解決此問題的詳細資訊,請參閱 ASP.NET Core 伺服器端和 Blazor Web App 其他安全性案例

如需 ASP.NET Core SignalR中 IHttpContextAccessorHttpContext 的指引,請參閱 ASP.NET Core SignalR中的IHttpContextAccessor/HttpContext。