Strings de conexão no appsettings.json

Existem diferentes maneiras de armazenar e ler strings de conexão no appsettings.json. Aprenda algumas maneiras fáceis de trabalhar com strings de conexão no .NET Core.

Em aplicações .NET Core e ASP.NET Core, as configurações da aplicação são armazenadas em um arquivo JSON chamado appsettings.json. Esta é a configuração padrão para projetos .NET Core. Arquivos INI e XML também são suportados, mas JSON é o padrão.

Método 1: Usando a localização padrão

Para definir as strings de conexão no appsettings.json é importante especificá-las na seção correta da estrutura JSON.

{
  "ConnectionStrings": {
    "BancoDeDados1": "Server=Servidor;Database=BancoDeDados1;Trusted_Connection=True;",
    "BancoDeDados2": "Server=Servidor;Database=BancoDeDados2;Trusted_Connection=True;"
  }
}

Agora podemos lê-las em nosso código chamando o método GetConnectionString no namespace Microsoft.Extensions.Configuration.

string myDb1ConnectionString = _configuration.GetConnectionString("BancoDeDados1");
string myDb2ConnectionString = _configuration.GetConnectionString("BancoDeDados2");

Para poder chamar o método, você deve importar o namespace Microsoft.Extensions.Configuration como este:

using Microsoft.Extensions.Configuration;

Método 2: Usando uma estrutura appsettings personalizada com seções

Se você deseja estruturar suas configurações de uma maneira mais lógica para o seu aplicativo, é possível localizar suas strings de conexão onde quiser e ainda ser capaz de acessá-las no código.

{
  "Modules": {
    "Logging": {
      "logDb": "Server=Servidor;Database=BancoDeDados1;Trusted_Connection=True;",
    },
    "Tenants": {
      "tenantsDb": "Server=Servidor;Database=BancoDeDados2;Trusted_Connection=True;",
    }
  } 
}

Neste cenário, não usamos o método GetConnectionString no namespace Microsoft.Extensions.Configuration. Em vez disso, usamos o método GetValue e usamos o ponto e vírgula ":" para representar a hierarquia.

// Exemplo de leitura da string de conexão logDb
string logDbConnectionString = _configuration.GetValue<string>("Modules:Logging:logDb");
// Exemplo de leitura da string de conexão tenantsDb
string tenantsDbConnectionString = _configuration.GetValue<string>("Modules:Tenants:tenantsDb");

Acessando o objeto Configuration

Para que os métodos acima funcionem, precisamos de acesso ao objeto de configuração ("_configuration" nos exemplos acima), que é um IConfiguration. Este objeto é registrado no contêiner IoC do .NET Core, então podemos facilmente ter acesso a ele através da injeção de dependência.

Acessar a configuração em Startup.cs

public class Startup
{
    private readonly IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }
}

Acessar a configuração em um controlador ASP.Net MVC

public class HomeController : Controller
{
    private readonly IConfiguration _configuration;

    public HomeController(IConfiguration configuration)
    {
        _configuration = configuration;
    }
}

Sobre configurações no .NET Core

Observe que este artigo apenas demonstra algumas maneiras fáceis de trabalhar especificamente com strings de conexão. Existem muitas outras maneiras de trabalhar com configurações de configuração no .NET Core. Por exemplo:

  • A interface IOptions
  • O método Configure do IServiceCollection
  • O método Bind de IConfigurationSection

Segurança de Strings de Conexão

É crucial nunca armazenar informações sensíveis, como strings de conexão, diretamente no appsettings.json se o código for de acesso público. Utilize variáveis de ambiente ou serviços como o Azure Key Vault para armazenar segredos em produção.

Resumo

Armazenar strings de conexão no appsettings.json facilita a mudança de configurações em produção sem alterar a base de código ou recompilar. Uma vez que você aprende sobre configuração no .NET Core e quais métodos usar, é bastante fácil trabalhar com isso.