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.
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão do .NET 10 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, consulte a Política de Suporte do .NET e do .NET Core. Para informações sobre a versão vigente, confira a versão .NET 9 deste artigo.
Este artigo explica como configurar e ler o ambiente em um aplicativo Blazor.
Ao executar um aplicativo localmente, o ambiente usa como padrão Development. Quando o aplicativo é publicado, o ambiente usa como padrão Production.
Recomendamos as seguintes convenções:
Sempre use o nome do ambiente "
Development" para desenvolvimento local. Isso ocorre porque a estrutura do ASP.NET Core espera exatamente esse nome ao configurar o aplicativo e as ferramentas para execuções de desenvolvimento local de um aplicativo.Para ambientes de teste, preparo e produção, sempre publique e implante o aplicativo. Você pode usar qualquer esquema de nomenclatura de ambiente que desejar para aplicativos publicados, mas sempre use nomes de arquivo de configuração de aplicativo com maiúsculas e minúsculas do segmento de ambiente que corresponde exatamente ao nome do ambiente. Para preparo, use "
Staging" (capital "S") como o nome do ambiente e nomeie o arquivo de configurações do aplicativo para corresponder (appsettings.Staging.json). Para produção, use "Production" (capital "P") como o nome do ambiente e nomeie o arquivo de configurações do aplicativo para corresponder (appsettings.Production.json).
Definir o ambiente
O ambiente é definido usando qualquer uma das seguintes abordagens:
- Blazor Web App ou Blazor Server: use qualquer uma das abordagens descritas em ambientes de runtime do ASP.NET Core para aplicativos gerais do ASP.NET Core.
- Qualquer aplicativoBlazor: Blazor iniciar configuração
- Propriedade Blazor WebAssembly:
<WasmApplicationEnvironmentName>autônoma
No cliente de um Blazor Web App, o ambiente é determinado do servidor por meio de um comentário HTML com o qual os desenvolvedores não interagem:
<!--Blazor-WebAssembly:{"environmentName":"Development", ...}-->
Para um aplicativo autônomo Blazor WebAssembly , defina o ambiente com a <WasmApplicationEnvironmentName> propriedade MSBuild no arquivo de projeto do aplicativo (.csproj). O exemplo a seguir define o Staging ambiente:
<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>
Os ambientes padrão são Development para build e Production para publicação.
Há várias abordagens para definir o ambiente em um aplicativo autônomo Blazor WebAssembly durante operações de build/publicação e uma abordagem para um aplicativo iniciando ou em execução no cliente:
Defina o valor da propriedade quando
dotnet buildoudotnet publishfor executado. O exemplo a seguir define o ambiente comoStagingquando um aplicativo é publicado:dotnet publish -p:WasmApplicationEnvironmentName=StagingDefina a propriedade durante a compilação ou publicação com base na configuração do aplicativo no Visual Studio. Os grupos de propriedades a seguir podem ser usados no arquivo de projeto do aplicativo ou em qualquer arquivo de configuração de publicação (
.pubxml). Adicione grupos de propriedades adicionais para outras configurações de build em uso.<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)' == 'Release'"> <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName> </PropertyGroup>O ambiente pode ser definido com base no uso de um perfil de publicação. No exemplo a seguir, a primeira condição define o ambiente como
Developmentquando nenhum perfil de publicação é usado (aplica-se a operações de compilação e publicação sem um perfil), enquanto a segunda condição abrange a configuração do ambiente paraProductionquando qualquer perfil de publicação é usado:<PropertyGroup Condition="'$(PublishProfile)' == ''"> <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName> </PropertyGroup> <PropertyGroup Condition="'$(PublishProfile)' != ''"> <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName> </PropertyGroup>Crie um endpoint de API da Web personalizado no servidor. O aplicativo autônomo Blazor WebAssembly solicita seu ambiente da API Web na inicialização do aplicativo ou sob demanda enquanto ele está em execução. O valor deve ser passado para
WebAssemblyStartOptionsou comwithApplicationEnvironment.Observação
Os links de documentação para o código fonte de referência do .NET geralmente carregam a ramificação padrão do repositório, que representa o desenvolvimento atual para a próxima versão do .NET. Para selecionar uma marca para uma versão específica, use a lista suspensa para Alternar branches ou marcas. Para saber mais, confira Como selecionar uma marca de versão do código-fonte do ASP.NET Core (dotnet/AspNetCore.Docs #26205).
- Blazor Web App ou Blazor Server: use qualquer uma das abordagens descritas em ambientes de runtime do ASP.NET Core para aplicativos gerais do ASP.NET Core.
- Qualquer aplicativo Blazor:
-
Blazor WebAssembly:
Blazor-Environmentcabeçalho
No cliente de um Blazor Web App, o ambiente é determinado pelo servidor por meio de um middleware que comunica o ambiente ao navegador por meio de um cabeçalho chamado Blazor-Environment. O cabeçalho define o ambiente quando WebAssemblyHost é criado no arquivo Program do cliente (WebAssemblyHostBuilder.CreateDefault).
Para um aplicativo autônomo Blazor WebAssembly em execução localmente, o servidor de desenvolvimento adiciona o Blazor-Environment cabeçalho com o nome do ambiente obtido do ambiente de hospedagem. O ambiente de hospedagem define o ambiente a partir da variável de ambiente ASPNETCORE_ENVIRONMENT estabelecida pelo arquivo Properties/launchSettings.json do projeto. O valor padrão da variável de ambiente em um projeto criado a partir do Blazor WebAssembly modelo de projeto é Development. Para obter mais informações, consulte a seção Definir o ambiente do lado do cliente por meio da seção de cabeçalho .
- Blazor Server: use qualquer uma das abordagens descritas em ambientes de runtime do ASP.NET Core para aplicativos gerais do ASP.NET Core.
- Blazor Server ou Blazor WebAssembly:
-
Blazor WebAssembly:
Blazor-Environmentcabeçalho
No cliente de um aplicativo hospedado Blazor WebAssembly , o ambiente é determinado do servidor por meio de um middleware que comunica o ambiente ao navegador por meio de um cabeçalho chamado Blazor-Environment. O cabeçalho define o ambiente quando WebAssemblyHost é criado no arquivo Program do cliente (WebAssemblyHostBuilder.CreateDefault).
Para um aplicativo autônomo Blazor WebAssembly em execução localmente, o servidor de desenvolvimento adiciona o Blazor-Environment cabeçalho com o nome do ambiente obtido do ambiente de hospedagem. O ambiente de hospedagem define o ambiente a partir da variável de ambiente ASPNETCORE_ENVIRONMENT estabelecida pelo arquivo Properties/launchSettings.json do projeto. O valor padrão da variável de ambiente em um projeto criado a partir do Blazor WebAssembly modelo de projeto é Development. Para obter mais informações, consulte a seção Definir o ambiente do lado do cliente por meio da seção de cabeçalho .
Para aplicativos em execução localmente em desenvolvimento, o aplicativo usa como padrão o ambiente Development. A publicação do aplicativo usa como padrão o ambiente para Production.
Para obter diretrizes gerais sobre configuração de aplicativos ASP.NET Core, consulte ambientes de tempo de execução do ASP.NET Core. Para configuração de aplicativos do lado do servidor com arquivos estáticos em ambientes que não sejam o Development ambiente durante o desenvolvimento e teste (por exemplo, Staging), consulte Arquivos Estáticos no ASP.NET Core.
Definir o ambiente do lado do cliente por meio da Blazor configuração de inicialização
O exemplo a seguir iniciará o Blazor no ambiente Staging se o nome do host incluir localhost. Caso contrário, o ambiente será definido como seu valor padrão.
Blazor Web App:
<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
if (window.location.hostname.includes("localhost")) {
Blazor.start({
webAssembly: {
environment: "Staging"
}
});
} else {
Blazor.start();
}
</script>
No exemplo anterior, o espaço reservado {BLAZOR SCRIPT} representa o caminho do script Blazor e o nome do arquivo. Para obter a localização do script, confira a estrutura do projeto ASP.NET Core Blazor.
Observação
Para Blazor Web Apps que definem a propriedade webAssembly>environment na configuração Blazor.start, é sábio corresponder o ambiente do servidor ao ambiente na propriedade environment. Caso contrário, a pré-geração no servidor opera em um ambiente diferente da renderização no cliente, o que resulta em efeitos arbitrários. Para obter diretrizes gerais sobre como definir o ambiente para um Blazor Web App, consulte os ambientes de runtime do ASP.NET Core.
Blazor WebAssembly autônomo:
<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
if (window.location.hostname.includes("localhost")) {
Blazor.start({
environment: "Staging"
});
} else {
Blazor.start();
}
</script>
No exemplo anterior, o espaço reservado {BLAZOR SCRIPT} representa o caminho do script Blazor e o nome do arquivo. Para obter a localização do script, confira a estrutura do projeto ASP.NET Core Blazor.
Usar a environment propriedade substitui o ambiente definido pelo Blazor-Environment cabeçalho.
A abordagem anterior define o ambiente do cliente sem alterar o valor do cabeçalho Blazor-Environment, nem modificar o registro no console do projeto de servidor do ambiente de inicialização para um Blazor Web App que adotou a renderização global do WebAssembly interativo.
Para registrar o ambiente no console em um aplicativo autônomo Blazor WebAssembly ou no projeto .Client de um Blazor Web App, coloque o seguinte código C# no arquivo Program depois que WebAssemblyHost for criado com WebAssemblyHostBuilder.CreateDefault e antes da linha que compila e executa o projeto (await builder.Build().RunAsync();):
Console.WriteLine(
$"Client Hosting Environment: {builder.HostEnvironment.Environment}");
Para obter mais informações sobre a inicialização de Blazor, veja Inicialização de Blazor no ASP.NET Core.
Definir o ambiente do lado do cliente por meio do cabeçalho
Blazor WebAssembly os aplicativos podem definir o ambiente com o Blazor-Environment cabeçalho. Especificamente, o cabeçalho de resposta deve ser definido no arquivo _framework/blazor.boot.json, mas não há problema em definir o cabeçalho nas respostas do servidor de arquivos para outras solicitações de arquivo Blazor ou em toda a implantação Blazor.
Embora a estrutura Blazor emite o nome do cabeçalho em kebab case com letras maiúsculas e minúsculas (Blazor-Environment), você é bem-vindo a usar tudo em minúsculas ou tudo em maiúsculas no kebab case (blazor-environment, BLAZOR-ENVIRONMENT).
Para execuções de desenvolvimento local com o servidor de desenvolvimento integrado do Blazor, você pode controlar o valor do cabeçalho Blazor-Environment definindo o valor da variável de ambiente ASPNETCORE_ENVIRONMENT no arquivo Properties/launchSettings.json do projeto. Ao executar localmente com o servidor de desenvolvimento, a ordem de precedência para determinar o ambiente do aplicativo é a configuração Blazor.start (chave environment)>Blazor-Environment cabeçalho de resposta (arquivo blazor.boot.json) >ASPNETCORE_ENVIRONMENT variável de ambiente (launchSettings.json). Não é possível usar a abordagem da variável de ambiente ASPNETCORE_ENVIRONMENT (launchSettings.json) para um aplicativo Blazor WebAssembly implantado. A técnica só funciona com o servidor de desenvolvimento em execuções locais do aplicativo.
IIS
No exemplo a seguir para o IIS, o cabeçalho personalizado (Blazor-Environment) é adicionado ao arquivo publicado web.config . O arquivo web.config está localizado na pasta bin/Release/{TARGET FRAMEWORK}/publish, onde o espaço reservado {TARGET FRAMEWORK} é a estrutura de destino:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="Blazor-Environment" value="Staging" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Observação
Para usar um arquivo personalizado web.config para IIS e que não seja substituído quando o aplicativo for publicado na pasta publish, consulte Hospedar e implantar o ASP.NET Core Blazor WebAssembly com IIS.
Nginx
Para servidores Nginx, use a diretiva add_header do ngx_http_headers_module:
http {
server {
...
location / {
...
add_header Blazor-Environment "Staging";
}
}
}
Para obter mais informações, consulte os seguintes recursos:
Apache
Para servidores Apache, use a diretiva Header do módulo mod_headers:
<VirtualHost *:80>
...
Header set Blazor-Environment "Staging"
...
</VirtualHost>
Para obter mais informações, consulte os seguintes recursos:
-
Documentação do Apache (pesquise a versão mais recente para "
mod_headers") - Hospedar e implantar ASP.NET Core Blazor WebAssembly com o Apache
Definir o ambiente para o Serviço de Aplicativo do Azure
Para um aplicativo autônomo Blazor WebAssembly , você pode definir o ambiente manualmente por meio da configuração inicial ou do Blazor-Environment cabeçalho.
Para um aplicativo do lado do servidor, defina o ambiente por meio de uma configuração ASPNETCORE_ENVIRONMENT de aplicativo no Azure:
Confirme se a caixa dos segmentos de ambiente nos nomes dos arquivos de configurações de aplicativos correspondem à caixa do nome do ambiente exatamente. Por exemplo, o nome do arquivo de configurações de aplicativo correspondente para o
Stagingambiente éappsettings.Staging.json. Se o nome do arquivo forappsettings.staging.json(minúscula "s"), o arquivo não é encontrado, e as configurações no arquivo não serão usadas no ambienteStaging.Para implantação do Visual Studio, confirme se o aplicativo foi implantado no slot de implantação correto. Em relação a um aplicativo chamado
BlazorAzureAppSample, o aplicativo será implantado no slot de implantaçãoStaging.No portal do Azure do slot de implantação do ambiente, defina o ambiente com a configuração do aplicativo
ASPNETCORE_ENVIRONMENT. Para um aplicativo chamadoBlazorAzureAppSample, o slot de Serviço de Aplicativo de preparo é chamadoBlazorAzureAppSample/Staging. Para a configuração do slotStaging, crie uma configuração de aplicativo paraASPNETCORE_ENVIRONMENTcom um valor deStaging. A configuração do slot de implantação está habilitada para a configuração.
Quando for solicitado em um navegador, o aplicativo BlazorAzureAppSample/Staging será carregado no ambiente Staging em https://blazorazureappsample-staging.azurewebsites.net.
Quando o aplicativo for carregado no navegador, a coleção de cabeçalhos de resposta para blazor.boot.json indicará que o valor do cabeçalho do Blazor-Environment é Staging.
As configurações do aplicativo do arquivo appsettings.{ENVIRONMENT}.json são carregadas pelo aplicativo, em que o espaço reservado {ENVIRONMENT} é o ambiente do aplicativo. No exemplo anterior, as configurações do appsettings.Staging.json arquivo são carregadas.
Ler o ambiente em um aplicativo Blazor WebAssembly
Obtenha o ambiente do aplicativo em um componente injetando IWebAssemblyHostEnvironment e lendo a propriedade Environment.
ReadEnvironment.razor:
@page "/read-environment"
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment Env
<h1>Environment example</h1>
<p>Environment: @Env.Environment</p>
Ler o lado do cliente do ambiente em um Blazor Web App
Supondo que a pré-geração não esteja desabilitada para um componente ou aplicativo, um componente no .Client projeto é pré-gerado no servidor. Como o servidor não possui um serviço IWebAssemblyHostEnvironment registrado, não é possível injetar o serviço nem utilizar, durante a renderização prévia do servidor, as propriedades e métodos de extensão do ambiente de host da implementação do serviço. Injetar o serviço em um componente WebAssembly interativo ou Interativo Automático resulta no seguinte erro de runtime:
There is no registered service of type 'Microsoft.AspNetCore.Components.WebAssembly.Hosting.IWebAssemblyHostEnvironment'.
Para resolver isso, crie uma implementação de serviço personalizada para IWebAssemblyHostEnvironment no servidor. Para obter mais informações e uma implementação de exemplo, consulte a seção Implementação de serviço personalizado no servidor do artigo Prerendering, que aparece posteriormente na Blazor documentação.
Ler o ambiente do lado do cliente durante a inicialização
Durante a inicialização, o WebAssemblyHostBuilder expõe o IWebAssemblyHostEnvironment através da propriedade HostEnvironment, que permite lógica específica do ambiente no código do construtor de host.
No arquivo Program:
if (builder.HostEnvironment.Environment == "Custom")
{
...
};
Os seguintes métodos de extensão de conveniência fornecidos por meio do WebAssemblyHostEnvironmentExtensions permitem a verificação do ambiente atual para Development, Production, Staging e nomes de ambiente personalizados.
No arquivo Program:
if (builder.HostEnvironment.IsStaging())
{
...
};
if (builder.HostEnvironment.IsEnvironment("Custom"))
{
...
};
A IWebAssemblyHostEnvironment.BaseAddress propriedade pode ser usada durante a inicialização quando o NavigationManager serviço não está disponível.