Partilhar via


IHttpContextAccessor / HttpContext em aplicativos ASP.NET Core Blazor

Observação

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 9 deste artigo.

Importante

Estas informações referem-se a um produto de pré-lançamento que pode ser substancialmente modificado antes de ser lançado comercialmente. A Microsoft não oferece garantias, expressas ou implícitas, em relação às informações fornecidas aqui.

Para a versão atual, consulte a versão .NET 9 deste artigo.

IHttpContextAccessor geralmente deve ser evitado na renderização interativa porque um HttpContext válido nem sempre está disponível.

IHttpContextAccessor pode ser usado para componentes que são renderizados estaticamente no servidor. No entanto, recomendamos evitá-lo, se possível.

HttpContext pode ser usado como um parâmetro em cascata somente em componentes raiz renderizados estaticamente para tarefas gerais, como inspecionar e modificar cabeçalhos ou outras propriedades no componente App (Components/App.razor). O valor é sempre null para renderização interativa.

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

Durante a renderização interativa, uma instância HttpContext pode nem existir. Para cenários em que o HttpContext é necessário em componentes interativos, recomendamos que os dados de contexto sejam transmitidos com o estado persistente do componente a partir do servidor.

Para obter contexto adicional em casos extremos avançados†, consulte a discussão nos seguintes artigos:

†A maioria dos desenvolvedores que criam e mantêm aplicativos Blazor não precisa se aprofundar em conceitos avançados, desde que a orientação geral neste artigo seja seguida.

Não use IHttpContextAccessor/HttpContext direta ou indiretamente nos componentes Razor de aplicativos Blazor do lado do servidor. Blazor aplicativos são executados fora do contexto de pipeline do ASP.NET Core. Não é garantido que o HttpContext esteja disponível no IHttpContextAccessore não é garantido que HttpContext mantenha o contexto que iniciou o aplicativo Blazor.

A abordagem recomendada para passar o estado da solicitação para o aplicativo Blazor é por meio de parâmetros de componente raiz durante a renderização inicial do aplicativo. Como alternativa, a aplicação pode copiar os dados para um serviço com escopo durante o evento de ciclo de vida de inicialização do componente raiz, para serem utilizados em toda a aplicação. Para obter mais informações, consulte Core do lado do servidor ASP.NET e Blazor Web App cenários adicionais de segurança.

Um aspeto crítico da segurança Blazor do lado do servidor é que o usuário conectado a um determinado circuito pode ser atualizado em algum momento depois que o circuito Blazor é estabelecido, mas o IHttpContextAccessornão é atualizado. Para obter mais informações sobre como resolver essa situação com serviços personalizados, consulte ASP.NET Core do lado do servidor e Blazor Web App cenários de segurança adicionais.

Para obter orientação sobre IHttpContextAccessor e HttpContext no ASP.NET Core SignalR, consulte IHttpContextAccessor/HttpContext em ASP.NET Core SignalR.