Megosztás a következőn keresztül:


IHttpContextAccessor / HttpContext ASP.NET Core Blazor-alkalmazásokban

Megjegyzés

Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.

Az IHttpContextAccessor használatát általában kerülni kell interaktív megjelenítés esetén, mert nem mindig elérhető egy érvényes HttpContext.

IHttpContextAccessor a statikus kiszolgálóoldali renderelés (statikus SSR) során használható, például statikusan renderelt gyökérösszetevőkben, valamint a kiszolgálón futó webes API-hívások jogkivonatkezelőjének használatakor . Javasoljuk, IHttpContextAccessor hogy kerülje, ha a kiszolgálón futó statikus SSR vagy kód nem garantálható.

HttpContext kaszkádolt paraméterként csak statikusan renderelt gyökérösszetevőkben vagy statikus SSR-ben használható általános feladatokhoz, például fejlécek vagy az App összetevő (App.razor) egyéb tulajdonságainak vizsgálatához és módosításához. Az érték az interaktív renderelés során van null .

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

További kontextust speciális peremhálózati esetekről† a következő cikkekben található vitafórumban talál:

†Az alkalmazásokat készítő és karbantartó Blazor fejlesztőknek nem kell speciális fogalmakat használniuk, amikor a jelen cikkben szereplő általános útmutatást követik. A legfontosabb szem előtt tartani, hogy HttpContext alapvetően egy kiszolgálóalapú, kérés-válasz funkció, amely csak általánosan elérhető a kiszolgálón a statikus SSR során, és csak akkor jön létre, ha egy felhasználó kapcsolatcsoportja létrejött.

A válasz indítása után ne állítsa be vagy módosítsa a fejléceket

Ha megkísérli beállítani vagy módosítani egy fejlécet az első renderelés után (a válasz elindítása után) hibaüzenet jelenik meg:

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

Példák a következő helyzetekre, amelyek ezt a hibát eredményezik:

  • A SignInManager<TUser>.PasswordSignInAsync hívása meg kell adnia a fejléceket a Identity helyes működéséhez, miközben streaming renderelést alkalmaz.
  • Élőfej beállítása vagy módosítása, miután a válasz elkezdődött az interaktív renderelés során.

A fejlécek válasz előtti beállításáról a ASP.NET Core Blazor indítási útmutatója nyújt útmutatást.

Ne használjon közvetlenül vagy közvetve IHttpContextAccessor/HttpContext a kiszolgálóoldali Razor-alkalmazások Blazor összetevőiben. Blazor alkalmazások a ASP.NET Core-folyamat környezetén kívül futnak. A HttpContext nem garantáltan elérhető a IHttpContextAccessor-en belül, és a HttpContext nem garantáltan tartalmazza azt a környezetet, amely elindította a Blazor alkalmazást.

A kérésállapot Blazor alkalmazásnak való átadásának ajánlott módszere a gyökérösszetevő paraméterein keresztül történik az alkalmazás kezdeti renderelése során. Másik lehetőségként az alkalmazás átmásolhatja az adatokat egy hatókörrel rendelkező szolgáltatásba a gyökérösszetevő inicializálási életciklus-eseményében az alkalmazás egészére való használatra. További információ: ASP.NET Core kiszolgálóoldali és Blazor Web App további biztonsági forgatókönyvek.

A kiszolgálóoldali Blazor biztonság egyik kritikus eleme, hogy az adott kapcsolatcsoporthoz csatlakoztatott felhasználó a Blazor kapcsolatcsoport létrehozása után bizonyos időpontban frissülhet, de a IHttpContextAccessornem frissül. A helyzet egyéni szolgáltatásokkal való kezelésére vonatkozó további információkért lásd ASP.NET Core kiszolgálóoldali és Blazor Web App további biztonsági forgatókönyveket.

Útmutatást IHttpContextAccessor és HttpContext-hez az ASP.NET Core SignalR-ben lásd: IHttpContextAccessor/HttpContext az ASP.NET Core SignalR-ben.