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 10 deste artigo.
Advertência
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e .NET Core. Para a versão atual, consulte 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 padrão do ambiente é Development. Quando o aplicativo é publicado, o padrão do ambiente é Production.
Recomendamos as seguintes convenções:
Use sempre o nome do ambiente "
Development" para o desenvolvimento local. Isso ocorre porque a estrutura ASP.NET Core espera exatamente esse nome ao configurar o aplicativo e as ferramentas para execução de desenvolvimento local de um aplicativo.Para ambientes de teste, preparação 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 invólucro do segmento de ambiente que corresponda exatamente ao nome do ambiente. Para preparação, use "
Staging" (maiúscula "S") como o nome do ambiente e nomeie o arquivo de configurações do aplicativo para corresponder a (appsettings.Staging.json). Para produção, use "Production" (maiúsculo "P") como o nome do ambiente e nomeie o arquivo de configurações do aplicativo para corresponder a (appsettings.Production.json).
Definir o ambiente
O ambiente é definido usando qualquer uma das seguintes abordagens:
- Blazor Web App ou Blazor Server: Utilize quaisquer das abordagens descritas nos ambientes de tempo de execução ASP.NET Core para aplicações gerais ASP.NET Core.
- Qualquer Blazor aplicativo: Blazor iniciar a configuração
- Autônomo Blazor WebAssembly:
<WasmApplicationEnvironmentName>propriedade
No cliente para um Blazor Web App, o ambiente é determinado a partir do servidor através de um comentário HTML com o qual os desenvolvedores não interagem:
<!--Blazor-WebAssembly:{"environmentName":"Development", ...}-->
Para uma aplicação autónoma Blazor WebAssembly, configure o ambiente com a propriedade <WasmApplicationEnvironmentName> MSBuild no ficheiro de projeto da aplicação (.csproj). O exemplo a seguir define o Staging ambiente:
<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>
Os ambientes padrão são Development para compilação e Production para publicação.
Existem várias abordagens para definir o ambiente numa aplicação autónoma Blazor WebAssembly durante operações de build/publish e uma abordagem para uma aplicação que inicia ou está a correr no cliente:
Defina o valor da propriedade quando
dotnet buildoudotnet publishfor invocado. O exemplo seguinte define o ambiente paraStagingquando uma aplicação é publicada:dotnet publish -p:WasmApplicationEnvironmentName=StagingDefine a propriedade durante a compilação ou publicação com base na configuração da aplicação no Visual Studio. Os seguintes grupos de propriedades podem ser usados no ficheiro de projeto da aplicação ou em qualquer ficheiro de configuração de publicação (
.pubxml). Adicionar 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 na utilização de um perfil de publicação. No exemplo seguinte, a primeira condição define o ambiente para
Developmentquando não é utilizado nenhum perfil de publicação (aplica-se tanto a operações de construção como de publicação sem perfil), enquanto a segunda condição cobre a definição do ambiente paraProductionquando qualquer perfil de publicação é utilizado:<PropertyGroup Condition="'$(PublishProfile)' == ''"> <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName> </PropertyGroup> <PropertyGroup Condition="'$(PublishProfile)' != ''"> <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName> </PropertyGroup>Crie um endpoint web API personalizado do lado do servidor. A aplicação autónoma Blazor WebAssembly solicita o seu ambiente à API web, seja no arranque da aplicação ou a pedido enquanto está a correr. O valor deve ser passado para
WebAssemblyStartOptionsou comwithApplicationEnvironment.Observação
Os links de documentação para a 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 tag para uma versão específica, use a lista suspensa Alternar entre ramificações ou tags. Para obter mais informações, consulte Como selecionar uma marca de versão do código-fonte ASP.NET Core (dotnet/AspNetCore.Docs #26205).
- Blazor Web App ou Blazor Server: Utilize quaisquer das abordagens descritas nos ambientes de tempo de execução ASP.NET Core para aplicações gerais ASP.NET Core.
- Qualquer Blazor aplicativo:
-
Blazor WebAssembly:
Blazor-Environmentcabeçalho
No cliente de um Blazor Web App, o ambiente é determinado pelo servidor através de um middleware que comunica o ambiente ao navegador através de um cabeçalho chamado Blazor-Environment. O cabeçalho define o ambiente quando o WebAssemblyHost é criado no arquivo Program no lado do cliente (WebAssemblyHostBuilder.CreateDefault).
Para um aplicativo Blazor WebAssembly autônomo em execução local, o servidor de desenvolvimento adiciona o cabeçalho Blazor-Environment 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 modelo de projeto Blazor WebAssembly é Development. Para obter mais informações, consulte a secção Definir o ambiente do lado do cliente através do cabeçalho na secção.
- Blazor Server: Use qualquer uma das abordagens descritas em ambientes de tempo de execução ASP.NET Core para aplicativos gerais ASP.NET Core.
- Blazor Server ou Blazor WebAssembly:
-
Blazor WebAssembly:
Blazor-Environmentcabeçalho
No cliente de um aplicativo hospedado Blazor WebAssembly , o ambiente é determinado a partir 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 o WebAssemblyHost é criado no arquivo Program no lado do cliente (WebAssemblyHostBuilder.CreateDefault).
Para um aplicativo Blazor WebAssembly autônomo em execução local, o servidor de desenvolvimento adiciona o cabeçalho Blazor-Environment 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 modelo de projeto Blazor WebAssembly é Development. Para obter mais informações, consulte a secção Definir o ambiente do lado do cliente através do cabeçalho na secção.
Para aplicativos executados localmente em desenvolvimento, o aplicativo assume como padrão o ambiente Development. A publicação da aplicação define o ambiente padrão como Production.
Para obter orientações gerais sobre a configuração do aplicativo ASP.NET Core, consulte ambientes de tempo de execução do ASP.NET Core. Para a configuração de aplicações servidoras com arquivos estáticos em ambientes diferentes do Development durante o desenvolvimento e teste (por exemplo, Staging), consulte Arquivos estáticos no ASP.NET Core.
Definir o ambiente do lado do cliente através da configuração de arranque Blazor
O exemplo a seguir inicia Blazor no ambiente Staging se o nome do host incluir localhost. Caso contrário, o ambiente é definido para o 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 marcador {BLAZOR SCRIPT} é o caminho de script Blazor e o nome do ficheiro. Para consultar a localização do script, veja a estrutura do projeto do ASP.NET Core Blazor.
Observação
Para Blazor Web Apps que definem a propriedade webAssembly>environment na configuração Blazor.start, é aconselhável alinhar o ambiente do servidor com o ambiente definido na propriedade environment. Caso contrário, a pré-renderização no servidor opera em um ambiente diferente da renderização no cliente, o que resulta em efeitos arbitrários. Para obter orientações gerais sobre como configurar o ambiente para um Blazor Web App, consulte ASP.NET Core runtime environments.
Blazor WebAssembly: independente
<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 marcador {BLAZOR SCRIPT} é o caminho de script Blazor e o nome do ficheiro. Para consultar a localização do script, veja a estrutura do projeto do ASP.NET Core Blazor.
O uso da propriedade environment substitui o ambiente definido pelo cabeçalho Blazor-Environment.
A abordagem anterior define o ambiente do cliente sem alterar o valor do cabeçalho Blazor-Environment, nem altera o log do console do projeto de servidor do ambiente de inicialização para um Blazor Web App que adotou a renderização global do Interactive WebAssembly.
Para registar o ambiente na consola em uma aplicação autónoma Blazor WebAssembly ou no projeto .Client de um Blazor Web App, coloque o seguinte código C# no ficheiro Program depois de o WebAssemblyHost ser 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, consulte ASP.NET Core Blazor inicialização.
Definir o ambiente do lado do cliente via cabeçalho
Blazor WebAssembly aplicativos podem definir o ambiente com o cabeçalho Blazor-Environment. Especificamente, o cabeçalho de resposta deve ser definido no arquivo _framework/blazor.boot.json, mas não há nenhum dano ao definir o cabeçalho nas respostas do servidor de arquivos para outras solicitações de arquivo Blazor ou toda a implantação Blazor.
Embora a estrutura Blazor emita o nome do cabeçalho no caso de kebab com maiúsculas e minúsculas mistas (Blazor-Environment), você pode usar todas as letras maiúsculas ou minúsculas de kebab (blazor-environment, BLAZOR-ENVIRONMENT).
Para execução de desenvolvimento local com o servidor de desenvolvimento interno 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 é Blazor.start configuração (chaveenvironment)>Blazor-Environment cabeçalho de resposta (arquivoblazor.boot.json) >ASPNETCORE_ENVIRONMENT variável de ambiente (launchSettings.json). Não é possível usar a abordagem de 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 de web.config publicado. O arquivo web.config está localizado na pasta bin/Release/{TARGET FRAMEWORK}/publish, onde o espaço reservado para {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 ficheiro personalizado web.config para o IIS que não seja substituído quando o aplicativo for publicado na pasta publish, consulte Hospedagem e implementação do ASP.NET Core Blazor WebAssembly com o IIS.
Nginx
Para servidores Nginx, use a diretiva add_header a partir 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 por "
mod_headers") - Hospede e implante o ASP.NET Core Blazor WebAssembly com o Apache
Definir o ambiente para o Serviço de Aplicativo do Azure
Para uma aplicação de Blazor WebAssembly autónomo, pode-se definir o ambiente manualmente através da configuração de início ou do cabeçalho Blazor-Environment.
Para um aplicativo do lado do servidor, defina o ambiente por meio de uma configuração de aplicativo ASPNETCORE_ENVIRONMENT no Azure:
Confirme se o invólucro dos segmentos de ambiente nos nomes de arquivo de configurações do aplicativo corresponde exatamente ao invólucro do nome do ambiente. Por exemplo, o nome do arquivo de configurações do aplicativo correspondente para o ambiente
Stagingéappsettings.Staging.json. Se o nome do arquivo forappsettings.staging.json(minúscula "s"), o arquivo não será localizado e as configurações no arquivo não serão usadas no ambienteStaging.Para implantação do Visual Studio, confirme se o aplicativo está implantado no slot de implantação correto. Para um aplicativo chamado
BlazorAzureAppSample, o aplicativo é implantado no slot de implantaçãoStaging.No portal do Azure para o slot de implantação do ambiente, configure o ambiente com a configuração de aplicativo "
ASPNETCORE_ENVIRONMENT". Para uma aplicação chamadaBlazorAzureAppSample, o Slot do Serviço de Aplicações intermédio é denominadoBlazorAzureAppSample/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 solicitado em um navegador, o aplicativo BlazorAzureAppSample/Staging é carregado no ambiente Staging em https://blazorazureappsample-staging.azurewebsites.net.
Quando o aplicativo é carregado no navegador, a coleção de cabeçalhos de resposta para blazor.boot.json indica que o valor do cabeçalho Blazor-Environment é Staging.
As definições da aplicação são carregadas pela aplicação a partir do ficheiro appsettings.{ENVIRONMENT}.json, onde o marcador de posição {ENVIRONMENT} é o ambiente da aplicação. No exemplo anterior, as configurações do arquivo appsettings.Staging.json são carregadas.
Ler o ambiente numa aplicação Blazor WebAssembly
Obtenha o ambiente da aplicação 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>
Leia o ambiente do lado do cliente num Blazor Web App
Supondo que a pré-renderização não esteja desabilitada para um componente ou o aplicativo, um componente no projeto .Client é pré-renderizado no servidor. Como o servidor não tem um serviço IWebAssemblyHostEnvironment registado, não é possível injetar o serviço nem usar os métodos e propriedades de extensão do ambiente de acolhimento da implementação do serviço durante a pré-renderização do servidor. Injetar o serviço em um componente Interactive WebAssembly ou Interactive Auto resulta no seguinte erro de tempo de execução:
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 um exemplo de implementação, consulte a seção Implementação de serviço personalizado no servidor do artigo Pré-renderização , que aparece posteriormente na Blazor documentação.
Leia o ambiente do lado do cliente durante a inicialização
Durante a inicialização, o WebAssemblyHostBuilder expõe o IWebAssemblyHostEnvironment por meio da propriedade HostEnvironment, que permite a lógica específica do ambiente no código do construtor de hosts.
No ficheiro Program:
if (builder.HostEnvironment.Environment == "Custom")
{
...
};
Os seguintes métodos de extensão de conveniência disponibilizados através de WebAssemblyHostEnvironmentExtensions permitem verificar o ambiente atual para Development, Production, Staginge nomes de ambiente personalizados:
No ficheiro Program:
if (builder.HostEnvironment.IsStaging())
{
...
};
if (builder.HostEnvironment.IsEnvironment("Custom"))
{
...
};
A propriedade IWebAssemblyHostEnvironment.BaseAddress pode ser usada durante a inicialização quando o serviço NavigationManager não estiver disponível.