IHttpContextAccessor
/
HttpContext
w aplikacjach ASP.NET Core Blazor
Ważny
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, wyraźnych ani domniemanych, w odniesieniu do podanych tutaj informacji.
Aby zapoznać się z bieżącą wersją, zobacz artykuł w wersji.NET 9.
Renderowania interaktywnego należy zwykle unikać z użyciem IHttpContextAccessor, ponieważ prawidłowy HttpContext nie zawsze jest dostępny.
IHttpContextAccessor można użyć w przypadku składników, które są statycznie renderowane na serwerze. Zalecamy jednak unikanie go, jeśli jest to możliwe.
Można użyć HttpContext jako parametru kaskadowego tylko w statycznie renderowanych komponentach głównych do zadań ogólnych, takich jak inspekcja i modyfikowanie nagłówków lub innych właściwości w komponencie App
(Components/App.razor
). Wartość jest zawsze null
na potrzeby renderowania interaktywnego.
[CascadingParameter]
public HttpContext? HttpContext { get; set; }
Podczas renderowania interakcyjnego wystąpienie HttpContext może nawet nie istnieć. W sytuacjach, gdy HttpContext jest wymagana w elementach interaktywnych, zalecamy przekazywanie danych kontekstowych z serwerowego stanu trwałego składnika .
Aby uzyskać dodatkowy kontekst w zaawansowanych przypadkach brzegowych, zobacz dyskusję w następujących artykułach: †
-
HttpContext jest prawidłowy na stronie Blazor interaktywnego renderowania serwera (
dotnet/AspNetCore.Docs
#34301) -
implikacje bezpieczeństwa używania IHttpContextAccessor w Blazor Server (
dotnet/aspnetcore
#45699)
† Większość deweloperów tworzących i utrzymujących aplikacje Blazor nie musi zagłębiać się w zaawansowane pojęcia, o ile są przestrzegane ogólne wskazówki zawarte w tym artykule.
Nie używaj IHttpContextAccessor/HttpContext bezpośrednio ani pośrednio w składnikach Razor aplikacji Blazor po stronie serwera. Aplikacje Blazor działają poza kontekstem potoku ASP.NET Core. Nie ma gwarancji, że HttpContext będzie dostępna w IHttpContextAccessor, a HttpContext nie ma gwarancji przechowywania kontekstu, w ramach którego uruchomiono aplikację Blazor.
Zalecaną metodą przekazywania stanu żądania do aplikacji Blazor jest użycie parametrów składnika głównego podczas początkowego renderowania aplikacji. Alternatywnie, aplikacja może skopiować dane do usługi zakresowej podczas zdarzenia inicjalizacyjnego głównego komponentu, aby mogły być używane w całej aplikacji. Aby uzyskać więcej informacji, zobacz ASP.NET Core po stronie serwera i Blazor Web App dodatkowe scenariusze zabezpieczeń.
Krytycznym aspektem zabezpieczeń Blazor po stronie serwera jest to, że użytkownik dołączony do danego obwodu może zostać zaktualizowany w pewnym momencie po ustanowieniu obwodu Blazor, ale IHttpContextAccessornie jest aktualizowany. Aby uzyskać więcej informacji na temat rozwiązywania tej sytuacji z usługami niestandardowymi, zobacz po stronie serwera ASP.NET Core i Blazor Web App dodatkowe scenariusze zabezpieczeń.
Aby uzyskać wskazówki dotyczące IHttpContextAccessor i HttpContext w ASP.NET Core SignalR, zobacz IHttpContextAccessor/HttpContext w ASP.NET Core SignalR.