共用方式為


ASP.NET Core IHttpContextAccessor 應用程式中的 /HttpContextBlazor

注意

這不是本文的最新版本。 關於目前版本,請參閱 本文的 .NET 10 版本

IHttpContextAccessor 通常應避免在互動式渲染中使用,因為有效的 HttpContext 並不總是可用。

IHttpContextAccessor 可以在靜態伺服器端轉譯期間使用 (靜態 SSR),例如靜態轉譯的根元件,以及在 伺服器上針對 Web API 呼叫使用令牌處理程式 時。 建議您在無法保證伺服器上執行靜態 SSR 或程式代碼時避免使用 IHttpContextAccessor

HttpContext只能用作靜態轉譯的根元件或在靜態 SSR 時用於執行一般任務的級聯參數,例如檢查和修改App元件中的標頭或其他屬性。App.razor 值是在null互動式渲染期間。

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

高階的 邊緣案例†中,如需額外的背景資訊,請參閱以下文章中的討論:

†遵循本文的一般指導方針時,建置和維護 Blazor 應用程式的最廣大開發人員不需要深入探討進階概念。 請記住 HttpContext 的最重要概念是,基本上是基於伺服器的請求-回應功能,只有在靜態伺服器端渲染(SSR)期間通常可用,而且只有在建立使用者的迴路時才會創建。

在響應啟動之後,請勿設定或修改標頭

嘗試在第一個轉譯之後設定或修改標頭(在回應開始之後)會導致錯誤:

System.InvalidOperationException: 'Headers are read-only, response has already started.'

導致此錯誤的情況範例包括:

如需在響應啟動之前設定標頭的指引,請參閱 ASP.NET Core Blazor 啟動

請勿在伺服器端 IHttpContextAccessor 應用程式的 / 元件中直接或間接使用 HttpContextRazorBlazor。 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 IHttpContextAccessorHttpContext 和 SignalR 的指引,請參閱 ASP.NET Core SignalR中的IHttpContextAccessor/HttpContext。