Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
IHttpContextAccessor byste se obecně měli vyhnout interaktivnímu vykreslování, protože platný HttpContext není vždy dostupný.
IHttpContextAccessor lze použít při vykreslování na straně statického serveru (static SSR), například v staticky vykreslovaných kořenových komponentách a při použití obslužné rutiny tokenu pro volání webového rozhraní API na serveru. Doporučujeme vyhnout se IHttpContextAccessor tomu, když není možné zaručit statické SSR nebo běžící kód na serveru.
HttpContext lze použít jako kaskádový parametr pouze v staticky vykreslených kořenových komponentách nebo během statického SSR pro obecné úlohy, jako je kontrola a úprava hlaviček nebo jiných vlastností v App komponentě (App.razor). Hodnota je null během interaktivního vykreslování.
[CascadingParameter]
private HttpContext? HttpContext { get; set; }
Další kontext v pokročilých hraničních případech† najdete v diskuzích v následujících článcích:
-
HttpContext je platný ve stránce pro interaktivní vykreslování serveru Blazor (
dotnet/AspNetCore.Docs#34301) -
Vliv na zabezpečení používání IHttpContextAccessoru v Blazor Server (
dotnet/aspnetcoreč. 45699)
†Mostní vývojáři, kteří vytvářejí a udržují Blazor aplikace, nemusí se zabývat pokročilými koncepty, když budou následovat obecné pokyny v tomto článku. Nejdůležitějším konceptem, který je třeba mít na paměti, je, že HttpContext je zásadně serverová funkce zaměřená na žádost a odpověď, která je obecně dostupná pouze na serveru během statického SSR a je vytvořena pouze tehdy, když je navázán okruh uživatele.
Po spuštění odpovědi nenastavujte ani neupravujte hlavičky.
Při pokusu o nastavení nebo úpravu záhlaví po prvním vykreslení (po spuštění odpovědi) dojde k chybě:
System.InvalidOperationException: 'Headers are read-only, response has already started.'
Mezi příklady situací, které vedou k této chybě, patří:
- Volání SignInManager<TUser>.PasswordSignInAsync, které musí nastavit hlavičky pro správné fungování Identity, a zároveň přijmout streamované vykreslování.
- Pokus o nastavení nebo úpravu hlavičky po spuštění odpovědi během interaktivního vykreslování
Pokyny k nastavení hlaviček před spuštěním odpovědi najdete v tématu ASP.NET Core spouštěníBlazor.
Nepoužívejte IHttpContextAccessor/HttpContext přímo ani nepřímo v Razor komponentách Blazor aplikací na straně serveru. Blazor aplikace běží mimo kontext potrubí ASP.NET Core. Není jisté, že HttpContext bude dostupná v rámci IHttpContextAccessor, a také není jisté, že HttpContext bude obsahovat kontext, který spustil aplikaci Blazor.
Doporučený postup pro předání stavu požadavku do aplikace Blazor je prostřednictvím parametrů kořenové komponenty během počátečního vykreslování aplikace. Případně může aplikace zkopírovat data do vymezené služby v události životního cyklu inicializace kořenové komponenty pro použití v celé aplikaci. Další informace najdete v tématu ASP.NET Core na straně serveru a Blazor Web App dalších scénářích zabezpečení.
Důležitým aspektem zabezpečení na straně Blazor serveru je, že uživatel připojený k danému okruhu se může v určitém okamžiku Blazor po navázání okruhu aktualizovat, ale IHttpContextAccessornení aktualizován. Další informace o řešení této situace s vlastními službami najdete v tématu ASP.NET jádro na straně serveru a Blazor Web App dalších scénářích zabezpečení.
Pokyny k IHttpContextAccessor a HttpContext v ASP.NET Core SignalR najdete v tématu IHttpContextAccessor/HttpContext v ASP.NET Core SignalR.