Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 utilizado durante a renderização estática do lado do servidor (SSR), por exemplo, em componentes raiz que são renderizados estaticamente e ao utilizar um manipulador de tokens para chamadas à API da web no servidor. Recomendamos evitar IHttpContextAccessor quando o SSR estático ou o código em execução no servidor não podem ser garantidos.
HttpContext pode ser usado como um parâmetro em cascata somente em componentes raiz renderizados estaticamente ou durante SSR estático para tarefas gerais, como inspecionar ou modificar cabeçalhos ou outras propriedades no componente App
(App.razor
). O valor é null
durante a renderização interativa.
[CascadingParameter]
public HttpContext? HttpContext { get; set; }
Para obter contexto adicional em casos complexos avançados, consulte a discussão nos seguintes artigos:
- Blazor
-
Implicações de segurança do uso de IHttpContextAccessor em Blazor Server (
dotnet/aspnetcore
#45699)
†A maioria dos desenvolvedores que criam e mantêm Blazor aplicativos não precisa se aprofundar em conceitos avançados quando as orientações gerais deste artigo são seguidas. O conceito mais importante a ter em mente é que HttpContext é fundamentalmente um recurso de solicitação-resposta baseado em servidor que só está disponível no servidor durante o SSR estático e só é criado quando o circuito de um usuário é estabelecido.
Não defina ou modifique cabeçalhos após o início da resposta
A tentativa de definir ou modificar um cabeçalho após a primeira renderização (após o início da resposta) resulta em um erro:
System.InvalidOperationException: 'Headers are read-only, response has already started.'
Exemplos de situações que resultam nesse erro incluem:
- Chamada SignInManager<TUser>.PasswordSignInAsync, que deve definir cabeçalhos para Identity funcionar corretamente, ao adotar a renderização de streaming.
- Tentativa de definir ou modificar um cabeçalho após o início da resposta durante a renderização interativa.
Para obter orientação sobre como definir cabeçalhos antes do início da resposta, consulte ASP.NET inicialização principalBlazor.
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 ASP.NET Core do lado do servidor e Blazor Web App cenários de segurança adicionais.
Um aspeto crítico da segurança do servidor Blazor é que o utilizador conectado a um determinado circuito pode ser atualizado em algum momento depois que o Blazor circuito é estabelecido, mas o IHttpContextAccessornão é atualizado. Para obter mais informações sobre como resolver esta situação com serviços personalizados, consulte Blazor Web App.
Para obter orientação sobre IHttpContextAccessor e HttpContext no ASP.NET Core SignalR, consulte IHttpContextAccessor/HttpContext no ASP.NET Core SignalR.