Dela via


IHttpContextAccessor / HttpContext i ASP.NET Core Blazor-appar

Not

Det här är inte den senaste versionen av den här artikeln. För den aktuella versionen, se .NET 9-versionen av den här artikeln.

Viktig

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

För den aktuella versionen, se .NET 9-versionen av den här artikeln.

IHttpContextAccessor bör vanligtvis undvikas med interaktiv återgivning eftersom en giltig HttpContext inte alltid är tillgänglig.

IHttpContextAccessor kan användas under statisk återgivning på serversidan (statisk SSR), till exempel i statiskt renderade rotkomponenter och när du använder en tokenhanterare för webb-API-anrop på servern. Vi rekommenderar att du undviker IHttpContextAccessor när statisk SSR eller kod som körs på servern inte kan garanteras.

HttpContext kan endast användas som en sammanhängande parameter i statiskt renderade rotkomponenter eller under statisk SSR för allmänna uppgifter, till exempel att inspektera och ändra rubriker eller andra egenskaper i komponenten App (App.razor). Värdet är null under interaktiv återgivning.

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

För ytterligare kontext i avancerade specialfall†, se diskussionen i följande artiklar.

De flesta utvecklare som bygger och underhåller Blazor-appar behöver inte fördjupa sig i avancerade koncept om de följer de allmänna riktlinjerna i den här artikeln. Det viktigaste konceptet att tänka på är att det HttpContext i grunden är en serverbaserad funktion för begärandesvar som endast är allmänt tillgänglig på servern under statisk SSR och endast skapas när en användares krets upprättas.

Ange eller ändra inte rubriker när svaret har startats

Om du försöker ange eller ändra en rubrik efter den första återgivningen (efter att svaret har startat) uppstår ett fel:

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

Exempel på situationer som resulterar i det här felet är:

Information om hur du anger rubriker innan svaret startar finns i ASP.NET Core-startBlazor.

Använd inte IHttpContextAccessor/HttpContext direkt eller indirekt i de Razor komponenterna i Blazor appar på serversidan. Blazor appar körs utanför ASP.NET Core-pipelinekontexten. Det HttpContext är inte garanterat att vara tillgängligt i IHttpContextAccessor, och HttpContext är inte garanterat att innehålla den kontext som startade Blazor-appen.

Den rekommenderade metoden för att skicka begärandetillståndet till Blazor appen är genom rotkomponentparametrar under appens första renderingen. Alternativt kan appen kopiera data till en begränsad tjänst i rotkomponentens initieringslivscykelhändelse för användning i hela appen. Mer information finns i ASP.NET Core-serversidan och Blazor Web App ytterligare säkerhetsscenarier.

En viktig aspekt av Blazor säkerhet på serversidan är att användaren som är ansluten till en viss krets kan uppdateras någon gång efter att Blazor-kretsen har upprättats men IHttpContextAccessorinte uppdateras. Mer information om hur du hanterar den här situationen med anpassade tjänster finns i ASP.NET Core-serversidan och Blazor Web App ytterligare säkerhetsscenarier.

Mer information om IHttpContextAccessor och HttpContext i ASP.NET Core SignalRfinns i IHttpContextAccessor/HttpContext i ASP.NET Core SignalR.