Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Nota
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão do .NET 10 deste artigo.
IHttpContextAccessor geralmente deve ser evitado com a renderização interativa porque um HttpContext válido nem sempre está disponível.
IHttpContextAccessor pode ser usado durante a renderização estática do lado do servidor (SSR estático), por exemplo, em componentes raiz renderizados estaticamente e ao usar um manipulador de token para chamadas de API Web no servidor. É recomendável 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 apenas em componentes raiz renderizados estaticamente ou durante SSR estática para tarefas gerais, como inspecionar e 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 sobre casos extremos avançados em †, consulte a discussão nos seguintes artigos:
A maioria dos desenvolvedores que criam e mantêm Blazor apps não precisam se aprofundar em conceitos avançados quando seguem a orientação geral deste artigo. 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 criado apenas 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:
- Chamar SignInManager<TUser>.PasswordSignInAsync, que deve definir cabeçalhos para Identity funcionar corretamente, ao adotar a renderização em streaming.
- Tentando definir ou modificar um cabeçalho depois que a resposta for iniciada durante a renderização interativa.
Para obter diretrizes sobre como definir cabeçalhos antes do início da resposta, consulte Inicialização do ASP.NET CoreBlazor.
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 do pipeline do ASP.NET Core. O HttpContext não tem garantia de estar disponível no IHttpContextAccessore HttpContext não tem garantia de manter 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, o aplicativo pode copiar os dados para um serviço com escopo no evento de ciclo de vida de inicialização do componente raiz para uso em todo o aplicativo. Para obter mais informações, consulte ASP.NET Core do lado do servidor e Blazor Web App cenários de segurança adicionais.
Um aspecto crítico da segurança do lado Blazor do servidor é que o usuário anexado 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 lidar com essa situação com serviços personalizados, consulte ASP.NET Core do lado do servidorBlazor Web App e cenários adicionais de segurança.
Para obter diretrizes sobre IHttpContextAccessor e HttpContext no ASP.NET Core SignalR, consulte IHttpContextAccessor/HttpContext no ASP.NET Core SignalR.