Partilhar via


Configuração do aplicativo

Gorjeta

Este conteúdo é um excerto do eBook, Blazor para ASP NET Web Forms Developers for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

A principal maneira de carregar a configuração do aplicativo em Web Forms é com entradas no arquivo web.config — no servidor ou em um arquivo de configuração relacionado referenciado pelo web.config. Você pode usar o objeto estático ConfigurationManager para interagir com as configurações do aplicativo, cadeias de conexão do repositório de dados e outros provedores de configuração estendida que são adicionados ao aplicativo. É comum ver as interações com a configuração do aplicativo como visto no código a seguir:

var configurationValue = ConfigurationManager.AppSettings["ConfigurationSettingName"];
var connectionString = ConfigurationManager.ConnectionStrings["MyDatabaseConnectionName"].ConnectionString;

Com o ASP.NET Core e o lado Blazordo servidor, o arquivo web.config PODE estar presente se seu aplicativo estiver hospedado em um servidor Windows IIS. No entanto, não ConfigurationManager há interação com essa configuração e você pode receber uma configuração de aplicativo mais estruturada de outras fontes. Vamos dar uma olhada em como a configuração é coletada e como você ainda pode acessar informações de configuração de um arquivo web.config .

Fontes de configuração

ASP.NET Core reconhece que há muitas fontes de configuração que você pode querer usar para seu aplicativo. A estrutura tenta oferecer o melhor desses recursos por padrão. A configuração é lida e agregada a partir dessas várias fontes pelo ASP.NET Core. Os valores carregados posteriormente para a mesma chave de configuração têm precedência sobre os valores anteriores.

O ASP.NET Core foi projetado para ser sensível à nuvem e facilitar a configuração de aplicativos para operadores e desenvolvedores. ASP.NET Core reconhece o ambiente e sabe se está sendo executado no seu Production ambiente OR Development . O indicador de ambiente é definido na variável de ambiente do ASPNETCORE_ENVIRONMENT sistema. Se nenhum valor estiver configurado, o padrão do aplicativo será executado no Production ambiente.

Seu aplicativo pode acionar e adicionar configuração de várias fontes com base no nome do ambiente. Por padrão, a configuração é carregada dos seguintes recursos na ordem listada:

  1. appsettings.json ficheiro, se presente
  2. appsettings. {ENVIRONMENT_NAME}.json ficheiro, se presente
  3. Arquivo de segredos do usuário no disco, se presente
  4. Variáveis de ambiente
  5. Argumentos de linha de comando

appsettings.json formato e acesso

O arquivo appsettings.json pode ser hierárquico com valores estruturados como o seguinte JSON:

{
  "section0": {
    "key0": "value",
    "key1": "value"
  },
  "section1": {
    "key0": "value",
    "key1": "value"
  }
}

Quando apresentado com o JSON anterior, o sistema de configuração nivela os valores filho e faz referência aos seus caminhos hierárquicos totalmente qualificados. Um caractere de dois pontos (:) separa cada propriedade na hierarquia. Por exemplo, a chave section1:key0 de configuração acessa o section1 valor literal do key0 objeto.

Segredos do utilizador

Os segredos do utilizador são:

  • Valores de configuração armazenados em um arquivo JSON na estação de trabalho do desenvolvedor, fora da pasta de desenvolvimento do aplicativo.
  • Carregado apenas quando executado Development no ambiente.
  • Associado a um aplicativo específico.
  • Gerenciado com o comando da CLI do user-secrets .NET.

Configure seu aplicativo para armazenamento de segredos executando o user-secrets comando:

dotnet user-secrets init

O comando anterior adiciona um UserSecretsId elemento ao arquivo de projeto. O elemento contém um GUID, que é usado para associar segredos ao aplicativo. Em seguida, você pode definir um segredo com o set comando. Por exemplo:

dotnet user-secrets set "Parent:ApiKey" "12345"

O comando anterior disponibiliza a Parent:ApiKey chave de configuração na estação de trabalho de um desenvolvedor com o valor 12345.

Para obter mais informações sobre como criar, armazenar e gerenciar segredos de usuário, consulte o Armazenamento seguro de segredos de aplicativos em desenvolvimento no documento ASP.NET Core .

Variáveis de ambiente

O próximo conjunto de valores carregados na configuração do seu aplicativo são as variáveis de ambiente do sistema. Todas as configurações de variáveis de ambiente do seu sistema agora estão acessíveis para você por meio da API de configuração. Os valores hierárquicos são nivelados e separados por dois pontos quando lidos dentro do seu aplicativo. No entanto, alguns sistemas operacionais não permitem os nomes de variáveis de ambiente de caracteres de dois pontos. ASP.NET Core aborda essa limitação convertendo valores com sublinhados duplos (__) em dois pontos quando são acessados. O Parent:ApiKey valor da seção de segredos do usuário acima pode ser substituído pela variável Parent__ApiKeyde ambiente .

Argumentos de linha de comando

A configuração também pode ser fornecida como argumentos de linha de comando quando seu aplicativo é iniciado. Use a notação de traço duplo (--) ou barra (/) para indicar o nome do valor de configuração a ser definido e o valor a ser configurado. A sintaxe é semelhante aos seguintes comandos:

dotnet run CommandLineKey1=value1 --CommandLineKey2=value2 /CommandLineKey3=value3
dotnet run --CommandLineKey1 value1 /CommandLineKey2 value2
dotnet run Parent:ApiKey=67890

O retorno do web.config

Se você implantou seu aplicativo no Windows no IIS, o arquivo web.config ainda configura o IIS para gerenciar seu aplicativo. Por padrão, o IIS adiciona uma referência ao ASP.NET Core Module (ANCM). ANCM é um módulo nativo do IIS que hospeda seu aplicativo no lugar do servidor Web Kestrel. Esta seção web.config é semelhante à seguinte marcação XML:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

A configuração específica do aspNetCore aplicativo pode ser definida aninhando um environmentVariables elemento no elemento . Os valores definidos nesta seção são apresentados ao aplicativo ASP.NET Core como variáveis de ambiente. As variáveis de ambiente são carregadas adequadamente durante esse segmento de inicialização do aplicativo.

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile=".\logs\stdout"
      hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="Parent:ApiKey" value="67890" />
  </environmentVariables>
</aspNetCore>

Ler configuração no aplicativo

O ASP.NET Core fornece a configuração do aplicativo por meio da IConfiguration interface. Essa interface de configuração deve ser solicitada por seus Blazor componentes, Blazor páginas e qualquer outra classe gerenciada pelo ASP.NET Core que precise de acesso à configuração. A estrutura ASP.NET Core preencherá automaticamente essa interface com a configuração resolvida configurada anteriormente. Em uma Blazor página ou marcação Razor de um componente, você pode injetar o IConfiguration objeto com uma @inject diretiva na parte superior do arquivo .razor como esta:

@inject IConfiguration Configuration

Esta instrução anterior torna o IConfiguration objeto disponível como a Configuration variável em todo o resto do modelo Razor.

As definições de configuração individuais podem ser lidas especificando a hierarquia de definições de configuração procurada como um parâmetro indexador:

var mySetting = Configuration["section1:key0"];

Você pode buscar seções de configuração inteiras usando o GetSection método para recuperar uma coleção de chaves em um local específico com uma sintaxe semelhante a GetSection("section1") para recuperar a configuração da seção 1 do exemplo anterior.

Configuração fortemente tipada

Com Web Forms, foi possível criar um tipo de configuração fortemente tipado que herdou do ConfigurationSection tipo e tipos associados. A ConfigurationSection permitiu que você configure algumas regras de negócios e processamento para esses valores de configuração.

No ASP.NET Core, você pode especificar uma hierarquia de classe que receberá os valores de configuração. Estas classes:

  • Não precisa herdar de uma classe pai.
  • Deve incluir public propriedades que correspondam às propriedades e referências de tipo para a estrutura de configuração que você deseja capturar.

Para o exemplo de appsettings.json anterior, você pode definir as seguintes classes para capturar os valores:

public class MyConfig
{
    public MyConfigSection section0 { get; set;}

    public MyConfigSection section1 { get; set;}
}

public class MyConfigSection
{
    public string key0 { get; set; }

    public string key1 { get; set; }
}

Essa hierarquia de classes pode ser preenchida adicionando a seguinte linha ao Startup.ConfigureServices método (ou local apropriado em Program.cs usando a builder.Services propriedade em vez de services):

services.Configure<MyConfig>(Configuration);

No restante do aplicativo, você pode adicionar um parâmetro de entrada a classes ou uma @inject diretiva em modelos do tipo IOptions<MyConfig> Razor para receber as definições de configuração fortemente tipadas. A IOptions<MyConfig>.Value propriedade produzirá o MyConfig valor preenchido a partir das definições de configuração.

@inject IOptions<MyConfig> options
@code {
    var MyConfiguration = options.Value;
    var theSetting = MyConfiguration.section1.key0;
}

Mais informações sobre o recurso Opções podem ser encontradas no padrão Opções no documento ASP.NET Core.