Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Notatka
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z aktualną wersją, zobacz artykuł w wersji .NET 10.
Renderowania interaktywnego należy zwykle unikać z użyciem IHttpContextAccessor, ponieważ prawidłowy HttpContext nie zawsze jest dostępny.
IHttpContextAccessor Można go używać podczas renderowania statycznego po stronie serwera (statycznego SSR), na przykład w statycznie renderowanych składnikach głównych oraz w przypadku korzystania z programu obsługi tokenów na potrzeby wywołań internetowego interfejsu API na serwerze. Zalecamy unikanie IHttpContextAccessor, gdy nie można zagwarantować statycznego SSR lub działania kodu na serwerze.
HttpContext może być używany jako parametr kaskadowy jedynie w statycznie renderowanych komponentach głównych lub podczas statycznego SSR do zadań ogólnych, takich jak inspekcja i modyfikacja nagłówków lub innych właściwości w komponencie App (App.razor). Wartość wynosi null podczas renderowania interaktywnego.
[CascadingParameter]
private HttpContext? HttpContext { get; set; }
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 konserwujących Blazor aplikacje nie musi zagłębiać się w zaawansowane pojęcia, gdy są przestrzegane ogólne wskazówki zawarte w tym artykule. Najważniejszą koncepcją, którą należy wziąć pod uwagę, jest to, że HttpContext jest to zasadniczo oparta na serwerze funkcja żądania-odpowiedź, która jest ogólnie dostępna na serwerze podczas statycznego przetwarzania SSR i tworzona tylko po ustanowieniu obwodu użytkownika.
Nie ustawiaj ani nie modyfikuj nagłówków po rozpoczęciu odpowiedzi
Próba ustawienia lub zmodyfikowania nagłówka po pierwszym renderowaniu (po uruchomieniu odpowiedzi) powoduje wystąpienie błędu:
System.InvalidOperationException: 'Headers are read-only, response has already started.'
Przykłady sytuacji, które powodują ten błąd, obejmują:
- Wywołanie SignInManager<TUser>.PasswordSignInAsync, który musi ustawić nagłówki dla Identity, aby działał poprawnie, przy jednoczesnym zastosowaniu renderowania strumieniowego.
- Próba ustawienia lub zmodyfikowania nagłówka po rozpoczęciu odpowiedzi podczas renderowania interakcyjnego.
Aby uzyskać wskazówki dotyczące ustawiania nagłówków przed rozpoczęciem odpowiedzi, zobacz ASP.NET Core Blazor startup.
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.